当前位置: 首页 > news >正文

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

这篇文章,主要介绍消息队列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之常见方法的使用。

相关文章:

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

这篇文章,主要介绍消息队列RabbitMQ之常见方法的使用。 目录 一、消息队列常见方法 1.1、连接工厂ConnectionFactory 1.2、连接Connection 1.3、通道Channel 1.4、交换机相关方法 (1)exchangeDeclare()声明交换机 1.5、队列相关方法 …...

Linux字符设备驱动模型之设备号

从上文中可知,在Linux用户空间中,如若需要操作硬件设备,均通过/dev目录下的设备文件节点进行操作,基本上每一种设备都会存在一个或者多个的设备节点。 并且在Linux内核中,其表示字符设备的结构成员也提供了相应的设备号…...

C++多态原理

请看下面的程序&#xff0c;该程序演示了多态类对象存储空间的大小。 #include <iostream> using namespace std; class A {public:int i;virtual void func() {}virtual void func2() {} }; class B : public A {int j;void func() {} }; int main() {cout << si…...

PMP认证与NPDP认证哪个含金量高?

两个证涉及的领域不一样的&#xff0c;一个是项目管理&#xff0c;对应的是项目经理&#xff1b;一个是产品管理&#xff0c;对应的是产品经理。含金量不能相比&#xff0c;但在各自的领域的含金量是很高的&#xff0c;至少专业程度或者知名度是最高的。 我来分别说一下PMP认证…...

改进YOLOv7-Tiny系列:首发改进结合BiFPN结构的特征融合网络,网络融合更多有效特征,高效涨点

💡该教程为改进进阶指南,属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 内容出品:CSDN博客独家更新 @CSDN芒果汁没有芒果 💡本篇文章 基于 YOLOv5、YOLOv7芒果改进YOLO系列:芒果改进YOLOv7-Tiny系列:首发改进结合BiFPN结…...

PPC Insights系列:洞见安全多方图联邦

开放隐私计算开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号知…...

SQLite注入记录(目前最全、核心函数用法、布尔盲注、时间盲注、webshell、动态库,绕过方式)

目录 与Mysql区别 全部核心函数 普通注入 查询所有列 查看所有表名...

Java简单的生成/解析二维码(zxing qrcode)

Hi I’m Shendi Java简单的生成/解析二维码&#xff08;zxing qrcode&#xff09; 在之前使用 qrcode.js 方式生成二维码&#xff0c;但在不同设备上难免会有一些兼容问题&#xff0c;于是改为后端&#xff08;Java&#xff09;生成二维码图片 这里使用 Google 的 zxing包 Jar…...

若依项目导出后端响应的Excel文件流处理

若依开源项目&#xff1a;http://doc.ruoyi.vip/ruoyi-vue 问题 前端 1. download.js 添加自定义方法 /*** 自定义方法&#xff1a;导出后端响应的 excel 文件流* param url 请求后端的接口地址 例如&#xff1a;"/downloadExcel"* param name 响应后的文件名称&…...

华为OD机试【独家】提供C语言题解 - 数组排序

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明数组…...

JVM详解——内存结构

文章目录内存结构1、 运行时数据区2、虚拟机栈3、本地方法栈4、程序计数器5、 堆6、方法区7、运行时常量池8、内存溢出和内存泄漏9、 堆溢出内存结构 1、 运行时数据区 Java虚拟机在运行Java程序期间将管理的内存划分为不同的数据区&#xff0c;不同的区域负责不同的职能&…...

Jvisualvm监控Tomcat以及相关参数优化

Tomcat阻塞模式 阻塞模式&#xff08;BIO&#xff09; 客户端和服务器创建一个连接&#xff0c;它就会创建一个线程来处理这个连接&#xff0c;以为这客户端创建了几个连接&#xff0c;服务端就需要创建几个线程来处理你&#xff0c;导致线程会产生很多&#xff0c;有很多线程…...

界面组件DevExpress WinForms v22.2 - 全面升级数据展示功能

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…...

正点原子第一期

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

「mysql是怎样运行的」第24章 一条记录的多幅面孔---事务的隔离级别与MVCC

「mysql是怎样运行的」第24章 一条记录的多幅面孔—事务的隔离级别与MVCC 文章目录「mysql是怎样运行的」第24章 一条记录的多幅面孔---事务的隔离级别与MVCC一、事前准备二、事务的隔离级别事务并发执行遇到的问题SQL标准中的四种隔离级别MySQL中支持的四种隔离级别三、MVCC原…...

入门Java第十五天 线程

一、多线程 1.1进程和线程 进程&#xff1a;进程就是操作系统中运行的每一个应用程序。例如&#xff1a;微信&#xff0c;QQ 线程&#xff1a;线程是进程中的每一个任务。 多线程&#xff1a;在一个进程中&#xff0c;可以同时执行多个线程。同时完成多个任务。 并发&#x…...

探索用卷积神经网络实现MNIST数据集分类

问题对比单个全连接网络&#xff0c;在卷积神经网络层的加持下&#xff0c;初始时&#xff0c;整个神经网络模型的性能是否会更好。方法模型设计两层卷积神经网络&#xff08;包含池化层&#xff09;&#xff0c;一层全连接网络。选择 5 x 5 的卷积核&#xff0c;输入通道为 1&…...

MySQL 索引失效场景

1&#xff0c;前言 索引主要是为了提高表的查询速率&#xff0c;但在某些情况下&#xff0c;索引也会失效的情况。 2&#xff0c;失效场景 2.1 最左前缀法则 查询从索引最左列开始&#xff0c;如果跳过索引中的age列&#xff0c;那么age后面字段的索引都将失效&#xff0c;…...

Xcode开发工具,图片放入ios工程

Xcode开发工具&#xff0c;图片放入ios工程&#xff0c;有三种方式&#xff1a; 一&#xff1a;Assets Assets.xcassets 一般是以蓝色的Assets.xcassets的文件夹形式在工程中&#xff0c;以Image Set的形式管理。当一组图片放入的时候同时会生成描述文件Contents.jso…...

操作系统权限提升(十九)之Linux提权-SUID提权

系列文章 操作系统权限提升(十八)之Linux提权-内核提权 SUID提权 SUID介绍 SUID是一种特殊权限&#xff0c;设置了suid的程序文件&#xff0c;在用户执行该程序时&#xff0c;用户的权限是该程序文件属主的权限&#xff0c;例如程序文件的属主是root&#xff0c;那么执行该…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...