当前位置: 首页 > 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;那么执行该…...

海康MVS相机+Halcon标定实战:18张图搞定畸变矫正(附标定板选购指南)

海康MVS相机Halcon标定实战&#xff1a;18张图搞定畸变矫正与标定板选购指南 工业视觉系统的精度往往取决于相机标定的准确性。在实际项目中&#xff0c;我们常遇到这样的困境&#xff1a;明明按照教程步骤操作&#xff0c;标定结果却总是不尽如人意。本文将分享一套经过实战验…...

大模型应用开发:从Demo到生产,小白程序员必看!收藏这份实战指南

本文深入剖析了将大模型应用从原型阶段推向生产环境所面临的关键挑战&#xff0c;涵盖数据处理&#xff08;格式多样性、切块策略、数据更新&#xff09;、检索质量&#xff08;找不到、找不准、找太多&#xff09;、生成阶段&#xff08;幻觉、引用溯源&#xff09;、规模化工…...

突破PDF转换困境:Marker全攻略——从格式混乱到精准转换的革新之路

突破PDF转换困境&#xff1a;Marker全攻略——从格式混乱到精准转换的革新之路 【免费下载链接】marker 一个高效、准确的工具&#xff0c;能够将 PDF 和图像快速转换为 Markdown、JSON 和 HTML 格式&#xff0c;支持多语言和复杂布局处理&#xff0c;可选集成 LLM 提升精度&am…...

UniApp多主题开发避坑指南:为什么SCSS+Require比Vuex方案更优雅?

UniApp多主题开发实战&#xff1a;SCSS动态加载方案深度解析与性能优化 在移动应用开发领域&#xff0c;主题切换功能已成为提升用户体验的重要环节。UniApp作为跨平台开发框架&#xff0c;如何实现高效、灵活的主题管理一直是开发者关注的焦点。本文将深入探讨基于SCSS变量与动…...

企业级流程建模前端架构:基于Vite+Vue3的低代码解决方案

企业级流程建模前端架构&#xff1a;基于ViteVue3的低代码解决方案 【免费下载链接】vite-vue-bpmn-process 基于 Vite TypeScript Vue3 NaiveUI Bpmn.js 的流程编辑器&#xff08;前端部分&#xff09;。支持高度自定义&#x1f680;&#x1f680;&#x1f680;。Vue 2 版本…...

Charticulator:数据可视化的自由创作平台与技术革命

Charticulator&#xff1a;数据可视化的自由创作平台与技术革命 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 当数据分析师面对预设模板无法表达复杂数据关系时…...

用 OpenAI Codex 打造你的 AI 结对编程助手

用 OpenAI Codex 打造你的 AI 结对编程助手 告别重复劳动&#xff0c;让 AI 直接帮你写代码、修 Bug、跑测试 在 AI 编程工具层出不穷的今天&#xff0c;OpenAI Codex 依然是许多开发者心目中的“神器”。与普通的代码补全工具不同&#xff0c;Codex 是一款终端原生的 AI 编程助…...

车辆信号震动信号的滤波、幅值与能量分析——基于测试台采集文件ssjlbpp.m等的研究

车辆信号的震动信号的滤波、幅值以及能量分析&#xff0c;信号是利用测试台采集回来的 文件列表&#xff1a; ssjlbpp.m cxssjlbpp.m ssj.m fuzhissj.m翻了翻硬盘里压箱底的车辆测试台数据&#xff0c;哦对&#xff0c;还有那堆当时随手起的.mat之外的.m文件&#xff1a;ssjlbp…...

3大突破:重新定义Revit插件开发流程

3大突破&#xff1a;重新定义Revit插件开发流程 【免费下载链接】RevitAddInManager Revit AddinManager update .NET assemblies without restart Revit for developer. 项目地址: https://gitcode.com/gh_mirrors/re/RevitAddInManager 引言&#xff1a;Revit插件开发…...

用了Qoder写代码飞快,联调时却总因字段不一致返工,问题出在哪?

发版前夜&#xff0c;前端字段对不上后端接口&#xff0c;联调卡了整晚。这种场景在 AI Coding 普及后并不罕见&#xff0c;不少团队用了 Qoder 觉得生成快、跑通快&#xff0c;可一旦要改需求&#xff0c;系统就僵住了。看似工具背锅&#xff0c;其实根子往往不在速度&#xf…...