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

【RabbitMQ笔记03】消息队列RabbitMQ七种模式之WorkQueues工作队列模式

这篇文章,主要介绍消息队列RabbitMQ七种模式之WorkQueues工作队列模式。

目录

一、工作队列模式

1.1、什么是Work Queues模式

1.2、工作队列模式的使用

(1)引入依赖

(2)编写生产者

(3)编写两个消费者


一、工作队列模式

1.1、什么是Work Queues模式

在某些情况下,当RabbitMQ中的消息积压的非常多的时候,一个消费者没办法消费,那么这个时候就可以增加消费者数量,以此来加快消息的消费。我们把所有消费者都看作是在同一个队列里面的,那么这个队列就可以理解称为工作队列,因为都是进行消费消息的。

Work Queues模式下,每一个消费者能够分配到的消息数量都是大致相同的,RabbitMQ采用轮询的方式,依次给每一个消费者分发消息。

工作队列模式提高了消息的并发消费,并且每一个消息只会被分发到一个消费者上面。

1.2、工作队列模式的使用

(1)引入依赖

<!-- 引入 RabbitMQ 依赖 -->
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.16.0</version>
</dependency>

(2)编写生产者

package com.rabbitmq.demo.workqueues;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;/*** @version 1.0.0* @Date: 2023/2/25 16:23* @Copyright (C) ZhuYouBin* @Description: 消息生产者*/
public class Producer {public static void main(String[] args) {// 1、创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 2、设置连接的 RabbitMQ 服务地址factory.setHost("127.0.0.1"); // 默认就是本机factory.setPort(5672); // 默认就是 5672 端口// 3、获取连接Connection connection = null; // 连接Channel channel = null; // 通道try {connection = factory.newConnection();// 4、获取通道channel = connection.createChannel();// 5、指定需要操作的消息队列,如果队列不存在,则会创建channel.queueDeclare("queue_demo_2023", false, false, false, null);// 6、发送消息for (int i = 0; i < 50; i++) {String message = "这是Work Queues模式,发送的第【" + (i+1) + "】条消息数据";channel.basicPublish("", "queue_demo_2023", null, message.getBytes());}} catch (Exception e) {e.printStackTrace();} finally {if (null != channel) {try {channel.close();} catch (Exception e) {}}if (null != connection) {try {connection.close();} catch (Exception e) {}}}}
}

(3)编写两个消费者

为了实现Work Queues工作队列模式,需要编写多个消费者,为了简单,这里就编写两个消费者(代码一样)。

package com.rabbitmq.demo.workqueues;import com.rabbitmq.client.*;import java.io.IOException;/*** @version 1.0.0* @Date: 2023/2/25 16:30* @Copyright (C) ZhuYouBin* @Description: 消息消费者*/
public class Consumer {public static void main(String[] args) {// 1、创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 2、设置连接的 RabbitMQ 服务地址factory.setHost("127.0.0.1"); // 默认就是本机factory.setPort(5672); // 默认就是 5672 端口// 3、获取连接Connection connection = null; // 连接Channel channel = null; // 通道try {connection = factory.newConnection();// 4、获取通道channel = connection.createChannel();// 5、指定需要操作的消息队列,如果队列不存在,则会创建channel.queueDeclare("queue_demo_2023", false, false, false, null);// 6、消费消息DeliverCallback callback = new DeliverCallback() {public void handle(String s, Delivery delivery) throws IOException {// 接收消息try {// 模拟消费者消费消息时候很慢的情况Thread.sleep(2000);} catch (Exception e) {}System.out.println("这是接收的消息:" + new String(delivery.getBody()));}};channel.basicConsume("queue_demo_2023", true, callback, i->{});} catch (Exception e) {e.printStackTrace();}}
}

启动消费者,查看控制台输入日志,此时可以发现,生产者总共发送了50条消息,两个消费者都是消费了25条消息,因为RabbitMQ是采用轮询的方式分发消息的(注意:先启动消费者,在启动生产者,不然看不到效果)。

到此,RabbitMQ中的工作队列模式就介绍完啦。

综上,这篇文章结束了,主要介绍消息队列RabbitMQ七种模式之WorkQueues工作队列模式。

http://www.lryc.cn/news/20450.html

相关文章:

  • 认识html
  • 在外包公司熬了 3 年终于进了字节,竭尽全力....
  • 绝对让你明明白白,脚把脚带你盯着 I2C 时序图将 I2C 程序给扣出来(基于STM32的模拟I2C)
  • 2023年全国最新工会考试精选真题及答案5
  • 一文2000字手把手教你自动化测试Selenium+pytest+数据驱动
  • windows安装Ubuntu子系统以及图形化界面记录
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理。Python DES实现源码
  • 为多态基类声明virtual析构函数
  • 啊哈 算法读书笔记 第 2 章 栈、队列、链表
  • Git ---- IDEA 集成 Git
  • 【LeetCode 704】【Go】二分查找
  • 【代码随想录训练营】【Day23】第六章|二叉树|669. 修剪二叉搜索树 |108.将有序数组转换为二叉搜索树|538.把二叉搜索树转换为累加树
  • CV——day78 读论文:通过静态背景构建扩展低通道路边雷达的探测距离(目标是规避风险)
  • 【编程入门】应用市场(go语言版)
  • Linux(openEuler)没有界面连接互联网方法
  • 第一天 软考中级--嵌入式系统设计师考试复习教程开始了
  • 分享 10 个高频 Python 面试题
  • ThreadLocal原理、结构、源码解析
  • 分布式之PBFT算法
  • Linux 操作系统——查看/修改系统时区、时间、本地时间修改为UTC
  • CSS数据类型以及符号
  • LeetCode-54. 螺旋矩阵
  • 【Python入门第十八天】Python For 循环
  • Qt图片定时滚动播放器
  • 李宏毅2023春季机器学习课程
  • 计算机操作系统知识点汇总
  • 【离线数仓-8-数据仓库开发DWD层设计要点-交易域相关事实表】
  • 计算机网络(七):DNS协议和原理,DNS为什么用UDP,网页解析的全过程
  • 算法23:多叉树_派对的最大快乐值
  • 中国ETC行业市场规模及未来发展趋势