【RabbitMQ笔记09】消息队列RabbitMQ之常见方法的使用

news2025/4/16 23:30:36

这篇文章,主要介绍消息队列RabbitMQ之常见方法的使用。

目录

一、消息队列常见方法

1.1、连接工厂ConnectionFactory

1.2、连接Connection

1.3、通道Channel

1.4、交换机相关方法

(1)exchangeDeclare()声明交换机

1.5、队列相关方法

(1)queueDeclare()声明队列

(2)queueDelete()删除队列

(3)queuePurge()清空队列

(4)queueBind()队列绑定交换机

1.6、生产者相关方法

(1)confirmSelect()开启发布确认

(2)waitForConfirms()等待确认

(3)basicPublish()发布消息

1.7、消费者相关方法

(1)basicConsume()消费消息

(2)basicAck()手动确认

(3)basicQos()方法


一、消息队列常见方法

1.1、连接工厂ConnectionFactory

RabbitMQ中连接消息队列服务器,是通过ConnectionFactory连接工厂来统一管理所有的Connection连接请求的,创建连接对象的时候,可以指定需要连接的RabbitMQ的IP地址、端口号、虚拟主机、连接用户名、密码、连接超时时间、创建连接对象等等。

ConnectionFactory是RabbitMQ客户端提供的一个连接工厂类,通过该类可以获取到具体的Connection连接对象,下面看下

// 1、创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 2、设置连接的 RabbitMQ 服务地址
factory.setHost("127.0.0.1"); // 默认是【localhost】
factory.setPort(5672); // 默认就是 5672 端口
factory.setUsername("guest"); // 用户名,默认是【guest】
factory.setPassword("guest"); // 密码,默认是【guest】
factory.setVirtualHost("/demo"); // 设置虚拟主机地址,默认是【/】
factory.setConnectionTimeout(60000); // 连接超时时间,默认是【60】秒

1.2、连接Connection

创建连接工厂对象ConnectionFactory之后,就可以调用【newConnection()】方法,创建具体的一个Connection连接对象啦,该方法存在很多重载类型,如下所示:

一般情况下,调用无参方法就可以啦,注意:【newConnection()】方法会抛出两个异常,分别是:IOException和TimeoutException超时异常。

// 创建连接
Connection connection = factory.newConnection();

1.3、通道Channel

RabbitMQ规定,操作消息队列必须通过Channel通道来完成,一个Connection可以创建多个Channel通道,但是同一次操作过程中,只能使用相同的Channel,也就是说,假设:A通道发送了消息正在等待RabbitMQ确认,那么我们就不能使用B通道给A通道发送确认标识,这样将会抛出异常。

Channel通道是使用Connection连接对象来创建的,调用【createChannel()】方法即可,有两个重载形式,该方法会抛出一个IOException异常。

可以指定创建的通道数量,默认最大通道数量是2047个。

// 创建通道
Channel channel = connection.createChannel();

1.4、交换机相关方法

(1)exchangeDeclare()声明交换机

RabbitMQ客户端可以通过调用【exchangeDeclare()】方法声明一个Exchange交换机,这个方法作用:如果声明的交换机已经存在,则不会创建,如果交换机不存在,则创建Exchange交换机。

【exchangeDeclare()】方法有多个重载形式,该方法会抛出一个IOException异常,方法参数介绍:

  • exchange参数:指定Exchange交换机的名称。
  • type参数:指定Exchange交换机的类型,四种可选:direct、fanout、topic、headers。
    • 可以直接使用字符串,也可以使用枚举类BuiltinExchangeType,例如:BuiltinExchangeType.DIRECT。
  • durable参数:是否支持消息持久化,默认false。
  • autoDelete参数:当交换机不再被使用的时候,是否自动删除这个Exchange交换机,默认false。
  • arguments参数:传递给Exchange交换机的一些参数属性。
  • internal参数:设置Exchange交换机是否为内部使用,设置为true则表示不能被client客户端直接使用。
// 声明Exchange交换机
channel.exchangeDeclare("exchange名称", BuiltinExchangeType.DIRECT);

1.5、队列相关方法

(1)queueDeclare()声明队列

在消费者中,可以调用【queueDeclare()】方法声明一个Queue队列,该方法作用:如果指定的Queue队列不存在,则创建该队列,如果已经存在,则不会重新创建。

【queueDeclare()】方法有几个重载形式,该方法会抛出一个IOException异常,方法参数介绍:

  • queue参数:指定Queue队列名称。
  • durable参数:消息队列是否需要持久化。
  • exclusive参数:这个Queue队列是否只能够被当前这个Connection连接使用。
  • autoDelete参数:当Queue不再被使用的时候,是否自动删除这个Queue队列,默认false。
  • arguments参数:传递给Queue队列的一些参数属性。
// 声明对象
channel.queueDeclare("队列名称", false, false, false, null);

(2)queueDelete()删除队列

queueDelete()方法作用:删除指定的Queue消息队列。

(3)queuePurge()清空队列

queuePurge()方法作用:将指定的Queue队列清空。

// 清空队列
channel.queuePurge("队列名称");

(4)queueBind()队列绑定交换机

queueBind()方法作用:将指定的Queue队列和Exchange交换机按照给定的RoutingKey路由键进行绑定。

1.6、生产者相关方法

(1)confirmSelect()开启发布确认

confirmSelect()方法作用:生产者开启发布确认模式。

// 开启发布确认模式
channel.confirmSelect();

(2)waitForConfirms()等待确认

waitForConfirms()方法作用:等待RabbitMQ消息队列的ACK确认结果,RabbitMQ成功接收消息,则返回true。

(3)basicPublish()发布消息

basicPublish()方法作用:发送消息到RabbitMQ指定的交换机。

1.7、消费者相关方法

(1)basicConsume()消费消息

basicConsume()方法作用:消费RabbitMQ分发给消费者的消息。

当设置自动确认,RabbitMQ将消息分发给消费者时候,消费者就会自动返回ACK标识给RabbitMQ,此时就会将消息从队列中删除。basicConsume()方法的参数介绍:

  • queue参数:从哪个Queue队列消费消息。
  • autoAck参数:消费者是否开启自动确认,默认是false。

(2)basicAck()手动确认

basicAck()方法作用:消费者成功将消息消费之后,调用这个方法返回ACK标识给RabbitMQ。相反,如果消费失败,则可以调用【basicNack()】方法。

(3)basicQos()方法

basicQos()方法作用:限制RabbitMQ分发消息给消费者的数量。假设A消费者设置【basicQos(1)】,那么当A消费者这一条消息还没有消费完成,RabbitMQ将不会继续分发消息给A消费者。

到此,RabbitMQ消息队列中常见的方法就介绍完啦。

综上,这篇文章结束了,主要介绍消息队列RabbitMQ之常见方法的使用。

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

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

相关文章

算法训练营 day58 动态规划 判断子序列 不同的子序列

算法训练营 day58 动态规划 判断子序列 不同的子序列 判断子序列 392. 判断子序列 - 力扣(LeetCode) 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而…

03、SVN 建立版本库

SVN 建立版本库1 版本库2 版本库的建立步骤2.1 创建版本库的根目录2.2 创建子目录2.3 通过命令创建版本库2.4 生成目的介绍1 版本库 Subversion 是将文件数据信息保存到版本库中进行管理的Subversion 允许用户对版本库目录进行定制 2 版本库的建立步骤 2.1 创建版本库的根目…

引用数据类型和基本数据类型

1.基本数据类型: byte:字节类型,Java中最小的数据类型,1个字节,取值范围-128~127,默认值0 char:字符型,用于存储单个字符,2个字节,取值范围0~65535&#xf…

Redis使用,AOF、RDB

前言 如果有人问你:"你会把 Redis 用在什么业务场景下?" 我想你大概率会说:"我会把它当作缓存使用,因为它把后端数据库中的数据存储在内存中,然后直接从内存中读取数据,响应速度会非常快。…

“速通“ 老生常谈的HashMap [实现原理源码解读]

👳我亲爱的各位大佬们好😘😘😘 ♨️本篇文章记录的为 HashMap 实现原理&&源码解读 相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉🙉&#x1f…

RocketMQ动态增加NameServer

前言 通过HTTP服务来设置NameServer地址,是唯一支持动态增加NameServer的方式,无需重启其它组件 网上搜了下没看到有兄弟们演示这块,所以刚才自己试了试,做个笔记 本文有详细的演示过程 都知道NameServer有4种配置方式&#xff0…

simulink入门指南

系列文章目录 文章目录系列文章目录常用操作技巧项目练习 - 动态系统二阶系统建模比例积分控制燕子俯冲系统建模滤波位操作总结常用操作技巧 画面缩放 空格键 鼠标左键: 拖拽空格键: fit屏幕 信号操作 双击signal可添加标签, 鼠标右键拖拽可给信号添加分支同一分支上的sig…

【并发基础】线程,进程,协程的详细解释

目录 一、什么是进程和线程 1.1 进程是什么呢? 1.2 线程又是什么呢? 1.3 线程和进程之间的关系 操作系统、进程、线程之间的关系图: 进程与线程的模型图: 下面来思考这样一个问题:为什么程序计数器、虚拟机栈和本地方法…

QNX7.1 交叉编译开源库

1.下载QNX7.1 SDK并解压 ITL:~/work/tiqnx710$ ls -l 总用量 16 drwxrwxr-x 4 xxx4096 1月 28 13:38 host -rwxrwxr-x 1 xxx 972 1月 28 13:38 qnxsdp-env.bat -rwxrwxr-x 1 xxx 1676 1月 28 13:38 qnxsdp-env.sh drwxrwxr-x 3 xxx 4096 1月 28 13:38 target xxxITL:~/work/ti…

NetApp SnapCenter 备份管理 ——借助应用程序一致的数据备份管理,简化混合云操作

NetApp SnapCenter 简单、可扩展、赋权:跨 Data Fabric 的企业级数据保护和克隆管理 主要优势 • 利用与应用程序集成的工作流和预定义策略简化备份、恢复和克隆管理。 • 借助基于存储的数据管理功能提高性能和可用性,并缩短测试和开发用时。 • 提供基…

干货 | 浅谈机器人强化学习--从仿真到真机迁移

“对于机器人的运动控制,强化学习是广受关注的方法。本期技术干货,我们邀请到了小米工程师——刘天林,为大家介绍机器人(以足式机器人为主)强化学习中的sim-to-real问题及一些主流方法。”一、前言设计并制造可以灵活运…

【靶机】vulnhub靶机cybox1

Vulnhub靶机Cybox下载地址 Cybox: 1.1 ~ VulnHub 信息搜集 首先进行靶机ip的发现。 sudo arp-scan -l 接着使用nmap扫描开放的端口,这里使用扫描全部端口和详细信息太慢了,分开检测 命令:nmap -p 21,25,80,110,143,443 -sV -A 192.168.174…

CentOS救援模式(Rescue Mode)及紧急模式(Emergency Mode)

当CentOS操作系统崩溃,无法正常启动时,可以通过救援模式或者紧急模式进行系统登录。启动CentOS, 当出现下面界面时,按e进入编辑界面。在编辑界面里,加入参数:systemd.unitrescue.target ,然后Ctrl-X启动进入…

Linux服务器上传文件到阿里云oss对象存储的两种方法ossutil、curl

ossutil支持在Windows、Linux、macOS等系统中运行,您可以根据实际环境下载和安装合适的版本。安装过程中,需要使用解压工具(unzip、7z)解压软件包,请提前安装其中的一个解压工具。yum -y install unzipLinux系统一键安…

正点原子第一期

ZYNQ是一个fpga用来硬件编程,外加一个软件编程 FPGA是可通过编程来修改其逻辑功能的数字集成电路 第三篇语法篇 第七章 verilog HDL语法 Verilog的简介 可编程逻辑电路:允许用户自行修改内部连接的集成电路,其内部的电路结构可以通过编程数…

ADAS-CIS相机关键参数综述

引言 “ CIS传感器关键参数是工程师选型参考的依据,抛开镜头,本文介绍CIS可见光传感器关键参数之CRA、QE、CFA、Shutter、SNR等。” 关键参数 CRA CFA(Chief Ray Angle)主光角,在上一篇可见光相机的介绍中我们介绍了Sensor的叠层结构&am…

leecode+剑指offer

1.算法入门14天 1.704二分查找: 题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 思路…

Matlab进阶绘图第3期—方块热图

方块热图是一种特殊的热图(Heatmap)。 与传统热图相比,方块热图通过不同颜色、不同大小的正方形以表示数据/特征的大小,能够更加直观地对数据分布情况进行分析,也因此可以在一些顶级期刊中看到它的身影,比…

数据库设计三大范式

数据库设计遵循三大范式的理由:在面对复杂是数据库设计的时候,设计数据库要遵循一定的规则,有了一定的规范,这样就可以是自己看起来舒服。 1.第一范式(确保每列保持原子性) 第一范式主要是保证数据表中的每一个字段的…

Java缓存面试题——Redis解决方案

文章目录1、什么是缓存击穿?该如何解决2、什么是缓存穿透?该如何解决3、什么是缓存雪崩?该如何解决4、什么是BigKey?该如何解决bigkey的危害发现bigkey解决bigkey5、redis过期策略都有哪些?6、讲一讲Redis缓存的数据一…