rabbitmq简单用法

ConnectionFactory

ConnectionFactory类是RabbitMQ Java客户端库中的一个类,用于创建RabbitMQ连接。常用属性和方法如下:

属性:

- host:RabbitMQ服务器的主机名,默认为localhost。
- port:RabbitMQ服务器的端口号,默认为5672- username:连接RabbitMQ服务器的用户名,默认为guest。
- password:连接RabbitMQ服务器的密码,默认为guest。
- virtualHost:连接RabbitMQ服务器的虚拟主机,默认为/- connectionTimeout:连接超时时间,默认为0(无限制)。
- requestedHeartbeat:请求的心跳超时时间,默认为0(无限制)。

方法:

- newConnection():创建一个新的RabbitMQ连接。
- createChannel():创建一个新的通道。

Channel

Channel类的常用方法包括:

1. basicPublish:用于将消息发送到指定的交换机和路由键。参数含义:- exchange:消息发送到的交换机名称- routingKey:消息发送到的队列名称- props:消息的属性- body:消息体作用:将消息发送到指定的交换机上,等待被消费者消费。2. basicConsume:用于从指定队列中消费消息。参数含义:- queue:要消费的队列名称- autoAck:是否自动确认消息- callback:消费者接收到消息后的回调函数作用:订阅队列中的消息,等待被消费者消费。3. basicAck:用于确认已经处理完毕的消息。参数含义:- deliveryTag:消息标签- multiple:是否批量确认作用:确认消息已被消费,告诉RabbitMQ可以删除该消息。4. basicNack:用于拒绝处理某个消息,并可以选择是否重新将消息放回队列。参数含义:- deliveryTag:消息标签- multiple:是否批量拒绝- requeue:是否重新入队列作用:拒绝消息,并可选择是否重新入队列。5. basicReject:用于拒绝处理某个消息,并可以选择是否重新将消息放回队列。参数含义:- deliveryTag:消息标签- requeue:是否重新入队列作用:拒绝消息,并重新入队列。6. queueDeclare:用于声明一个队列。参数含义:- queue:队列名称- durable:是否持久化- exclusive:是否独占- autoDelete:是否自动删除- arguments:队列参数作用:声明队列,如果队列不存在则创建。7 exchangeDeclare:用于声明一个交换机。参数含义:- exchange:交换机名称- type:交换机类型- durable:是否持久化- autoDelete:是否自动删除- internal:是否内部使用- arguments:交换机参数作用:声明交换机,如果交换机不存在则创建。8. queueBind:用于将队列绑定到指定的交换机和路由键。参数含义:- queue:队列名称- exchange:交换机名称- routingKey:路由键- arguments:绑定参数作用:将队列绑定到交换机上,等待被消费者消费。

Channel类的作用是提供了与RabbitMQ服务器进行通信的通道,通过该通道可以进行消息的发送和接收,以及队列和交换机的声明和绑定等操作。同时,Channel类还提供了一些方法用于控制消息的确认和拒绝,以及消息的持久化等高级特性。


DefaultConsumer

DefaultConsumer是RabbitMQ客户端库中的一个类,它实现了Consumer接口,用于处理从RabbitMQ服务器接收到的消息。

DefaultConsumer类的常用方法包括:

1. handleDelivery:处理从RabbitMQ服务器接收到的消息。void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException;参数含义:- consumerTag:消费者标签,用于标识消费者。- envelope:消息的信封,包含了消息的元数据,如交换机、路由键等。- properties:消息的属性,包含了消息的元数据,如消息ID、消息类型等。- body:消息的内容,即消息体。2. handleShutdownSignal:处理与RabbitMQ服务器的连接关闭信号。void handleShutdownSignal(String consumerTag, ShutdownSignalException sig);参数含义:- consumerTag:消费者标签,用于标识消费者。- sig:关闭信号异常,包含了关闭的原因和异常信息。3. handleConsumeOk:处理与RabbitMQ服务器的消费者注册成功信号。void handleConsumeOk(String consumerTag);参数含义:- consumerTag:消费者标签,用于标识消费者。4. handleCancelOk:处理与RabbitMQ服务器的消费者取消注册成功信号。void handleCancelOk(String consumerTag);参数含义:- consumerTag:消费者标签,用于标识消费者。

在handleDelivery方法中,我们可以根据需要对消息进行处理,例如解析消息内容、存储消息等。

生产者示例代码

创建RabbitMQ连接、创建通道、声明交换机和发送消息的完整示例代码:

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;public class RabbitMQExample {private static final String QUEUE_NAME = "my_queue";private static final String EXCHANGE_NAME = "my_exchange";private static final String ROUTING_KEY = "my_routing_key";public static void main(String[] args) {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");factory.setPort(5672);factory.setUsername("guest");factory.setPassword("guest");factory.setVirtualHost("/");try {// 创建连接Connection connection = factory.newConnection();// 创建通道Channel channel = connection.createChannel();// 声明交换机channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);// 发送消息String message = "Hello, RabbitMQ!";channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, message.getBytes());System.out.println("Sent message: " + message);// 关闭通道和连接channel.close();connection.close();} catch (IOException | TimeoutException e) {e.printStackTrace();}}
}

在这个示例中,使用了默认的本地RabbitMQ服务器,用户名和密码都是"guest",虚拟主机是"/"。创建了一个名为"my_exchange"的topic类型交换机,并发送了一条消息到该交换机上,使用了"my_routing_key"作为路由键。


消费者示例代码

创建RabbitMQ连接、创建通道、声明交换机、以及接收消息:

import com.rabbitmq.client.*;public class RabbitMQExample {private final static String QUEUE_NAME = "my_queue";private final static String EXCHANGE_NAME = "my_exchange";private final static String ROUTING_KEY = "my_routing_key";public static void main(String[] args) throws Exception {// 创建连接工厂ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");factory.setPort(5672);factory.setUsername("guest");factory.setPassword("guest");factory.setVirtualHost("/");// 创建连接Connection connection = factory.newConnection();// 创建通道Channel channel = connection.createChannel();// 声明交换机channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.TOPIC);// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 绑定队列到交换机channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);// 创建消费者Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {String message = new String(body, "UTF-8");System.out.println("Received message: " + message);}};// 开始消费消息channel.basicConsume(QUEUE_NAME, true, consumer);}
}

以上示例代码演示了如何创建一个RabbitMQ连接、创建通道、声明一个类型为TOPIC的交换机、以及接收消息的过程。你可以根据自己的需求修改相关参数和逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/110009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24届好未来数开笔试

目录 选择、多选SQL题目描述输入 目标解答解析 题目分享 选择、多选 Java, int x 1, float y 2, x/y 0.5 2. Hive 的数据结构 基本数据类型 复合数据类型 text 不是 Hive 内外表 建表时如果不显示声明表的类型为 外表 Kafka 通过()避免任务重复执行…

基于单片机的双交通灯控制设计

目录 摘要...................................................................................... 2 第一章 绪论........................................................................ 5 1.1 研究课题背景....................................................…

【安卓环境搭建报错的解决】

安卓环境搭建报错的解决 问题描述解决方法 问题描述 电脑中新安装的 Android Studio Giraffe | 2022.3.1 Patch ,运行 studio 系统工程,提示如下错误 Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.…

NXP官方uboot针对ALPHA开发板网络驱动更改

一. 简介 I.MX6UL/ULL 有两个网络接口 ENET1 和 ENET2 ,正点原子的 I.MX6U-ALPHA 开发板提供了这两个网络接口,其中 ENET1 和 ENET2 都使用 LAN8720A 作为 PHY 芯片。 之前文章对 网络接口进行了简单的说明,地址如下&#xff1…

【技巧】如何设置Excel表只输入固定内容?

如果你需要在Excel表格中输入固定的内容,可以设置“限制录入内容”,这样就只能输入设置好的内容,避免不小心输入错误信息。下面来看看如何设置吧。 首先,打开Excel表格后,选中需要输入固定内容的表格区域。 比如图片…

小程序如何进行分包操作

目录 1.在app.json中设置分包 2.在需要分包的页面中引入分包 3.加载分包 4.分包优化 分包与主包的通讯 分包中使用公共库和组件 分包中的图片资源 小程序分包操作可以优化小程序的启动速度和减少小程序包的大小,提升小程序的体验。 1.在app.json中设置分包 {&q…

Flutter笔记:发布一个Flutter头像模块 easy_avatar

Flutter笔记 发布一个头像Flutter模块 easy_avatar 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/1339…

[Leetcode学习-C语言]Two Sum

题目连接:LeetCode - The Worlds Leading Online Programming Learning Platform leetcode写C真的很多坑...... 用 hash 拉链法 构造hash函数,才能写这么题小题。 typedef struct Node { // 得自己做个hash 拉链法struct Node *next;int val;int sign…

利用PHP快速抓取音频数据的方法与技巧

目录 使用cURL库抓取音频数据 优点 潜在问题及解决方案 使用file_get_contents函数抓取音频数据 优点 潜在问题及解决方案 总结 随着互联网的发展,音频内容在网络上的应用越来越广泛,如音乐播放、语音通信等。有时,我们需要从特定的音…

ModStartCMS v7.4.0 公共图片库支持,安全功能升级

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议,免费且不限制商业使用。 功能特性 丰富的模块市…

7-1 求解马鞍点问题

若矩阵Anm中某个元素A[i][j]是矩阵第i行中值最小的元素,同时又是第j列中值最大的元素,则称元素A[i][j]是矩阵中的一个马鞍点。 设以二维数组存储矩阵,编写算法求矩阵A中的所有马鞍点,算法的时间复杂度要尽量的低。 注意当最大值…

【Linux-常用命令-基础命令-删除文件夹以及内容-rm--r-命令-笔记】

【Linux-常用命令-基础命令-删除文件夹以及内容-rm--r-命令-笔记】 1、前言2、操作3、自己的操作 1、前言 最近,在使用Linux的时,使用相关基础命令是,总是容易忘记,上网一搜,大部分都写的比较繁琐,关于删除…

Python学习笔记——存储容器

食用说明:本笔记适用于有一定编程基础的伙伴们。希望有助于各位! 列表 列表类似数组,其中可以包含不同类型的元素,写法如下: list1 [Google, Runoob, 1997, 2000] list2 [1, 2, 3, 4, 5 ] list3 ["a", …

Qt工具开发,该不该跳槽?

Qt工具开发,该不该跳槽? 就这样吧,我怕你跳不动。 嵌入式UI,目前趋势是向着LVGL发展。QT已经在淘汰期了。很多项目还在用,但技术上已经落后。QT短期内不会全面淘汰,但退位让贤的大趋势已经很清楚了。 最近很多小伙伴…

liunx下软链接和硬链接的用法

什么是软链接(类似快捷方式): 符号连接(Symbolic Link),也叫软连接。 软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件&#xff0c…

嵌入式开发学习之STM32F407串口(USART)收发数据(三)

嵌入式开发学习之STM32F407串口(USART)收发数据(三) 开发涉及工具一、选定所使用的串口二、配置串口1.配置串口的I/O2.配置串口参数属性3.配置串口中断4.串口中断在哪里处理5.串口如何发送字符串 三、封装串口配置库文件1.创建头文…

【OpenVINO】OpenVINO C# API 常用 API 详解与演示

OpenVINO C# API 常用 API 详解与演示 1 安装OpenVINO C# API2 导入程序集 3 初始化OpenVINO 运行时内核4 加载并获取模型信息4.1 加载模型4.2 获取模型信息 5 编译模型并创建推理请求6 张量Tensor6.1 张量的获取与设置6.2 张量的信息获取与设置 7 加载推理数据7.1 获取输入张量…

循环日程安排问题(分治法)

函数接口定义&#xff1a; void Plan(int a[][N],int k); 裁判测试程序样例&#xff1a; #include #include <math.h> #include using namespace std; #define N 100 void Plan(int a[][N],int k); int main() { int i,j,a[N][N],k,size; cin>>k; sizepow(2,k)…

金山终端安全系统V9.0 SQL注入漏洞复现

0x01 产品简介 金山终端安全系统是一款为企业提供终端防护的安全产品&#xff0c;针对恶意软件、病毒和外部攻击提供防范措施&#xff0c;帮助维护企业数据和网络。 0x02 漏洞概述 金山终端安全系统V9.0 /inter/update_software_info_v2.php页面存在sql注入漏洞&#xff0c;该…

VsCode通过Git History插件查看某个页面的版本修改记录

首先需要安装插件Git History 方式一&#xff1a;通过 点击File History 查看某个文件变更&#xff1b;即通过commit的提交记录去查看某个文件的修改 方式二&#xff1a;通过点击选择toggle File Blame 查看当前页面每一行所有提交修改记录