文章目录

  • 一、work模式
    • 1.1. 图示
    • 1.2. 消费者1
    • 1.3. 消费者2
    • 1.4. 生产者
    • 1.5. 测试
  • 二、Work模式的“能者多劳”
    • 2.1. 关键配置
    • 2.2. 测试:

一、work模式

1.1. 图示


一个生产者、2个消费者。

一个消息只能被一个消费者获取。

1.2. 消费者1

package com.gblfy.rabbitmq.work;import com.gblfy.rabbitmq.util.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;public class Recv {private final static String QUEUE_NAME = "test_queue_work";public static void main(String[] argv) throws Exception {// 获取到连接以及mq通道Connection connection = ConnectionUtil.getConnection();Channel channel = connection.createChannel();// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 同一时刻服务器只会发一条消息给消费者// channel.basicQos(1);// 定义队列的消费者QueueingConsumer consumer = new QueueingConsumer(channel);// 监听队列,手动返回完成channel.basicConsume(QUEUE_NAME, false, consumer);// 获取消息while (true) {QueueingConsumer.Delivery delivery = consumer.nextDelivery();String message = new String(delivery.getBody());System.out.println(" [x] Received '" + message + "'");//休眠Thread.sleep(10);// 返回确认状态channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);}}
}

1.3. 消费者2

package com.gblfy.rabbitmq.work;import com.gblfy.rabbitmq.util.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;public class Recv2 {private final static String QUEUE_NAME = "test_queue_work";public static void main(String[] argv) throws Exception {// 获取到连接以及mq通道Connection connection = ConnectionUtil.getConnection();Channel channel = connection.createChannel();// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 同一时刻服务器只会发一条消息给消费者//channel.basicQos(1);// 定义队列的消费者QueueingConsumer consumer = new QueueingConsumer(channel);// 监听队列,手动返回完成状态channel.basicConsume(QUEUE_NAME, false, consumer);// 获取消息while (true) {QueueingConsumer.Delivery delivery = consumer.nextDelivery();String message = new String(delivery.getBody());System.out.println(" [x] Received '" + message + "'");// 休眠1秒Thread.sleep(1000);channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);}}
}

1.4. 生产者

向队列中发送10条消息。

1.5. 测试

测试结果:
1、消费者1和消费者2获取到的消息内容是不同的,同一个消息只能被一个消费者获取。
2、消费者1和消费者2获取到的消息的数量是相同的,一个是奇数一个是偶数。

其实,这样是不合理的,应该是消费者1要比消费者2获取到的消息多才对。

二、Work模式的“能者多劳”

2.1. 关键配置

2.2. 测试:

启动消费者1

启动消费者2

查看管控台消费者是否启动完毕


启动生产者

消息一共发送10条


消费者1比消费者2获取的消息更多。

RabbitMQ的5种队列_Work模式_入门试炼_第5篇相关推荐

  1. RabbitMQ的5种队列_简单队列_入门试炼_第4篇

    Statement 文章目录 一.队列总览 1.1. 图示 1.2. 说明 二.简单队列 2.1. 图示 2.2. 导入RabbitMQ的客户端依赖 2.3. 获取MQ的连接 2.4. 生产者发送消息 ...

  2. RabbitMQ的5种队列_消息确认模式_入门试炼_第6篇

    消费者从队列中获取消息,服务端如何知道消息已经被消费呢? 模式1:自动确认 只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成功消费. 模式2:手动确认 消费者从队列中获取消 ...

  3. RabbitMQ的5种队列_订阅模式_入门试炼_第7篇

    解读: 1.1个生产者,多个消费者 2.每一个消费者都有自己的一个队列 3.生产者没有将消息直接发送到队列,而是发送到了交换机 4.每个队列都要绑定到交换机 5.生产者发送的消息,经过交换机,到达队列 ...

  4. RabbitMQ的5种队列_通配符模式_入门试炼_第8篇

    5.9.2.生产者

  5. RabbitMQ的5种队列_路由模式_入门试炼_第8篇

    生产者 5.8.3.费者1(前台系统) 消费2(搜索系统)

  6. RabbitMQ管理界面简述_入门试炼_第3篇

  7. RabbitMQ详解(三)------RabbitMQ的五种队列

    目录 1.简单队列 2.work 模式 3.发布/订阅模式 4.路由模式 5.主题模式 6.四种交换器 7.总结 上一篇博客我们介绍了RabbitMQ消息通信中的一些基本概念,这篇博客我们介绍 Rab ...

  8. TortoiseGit 单文件版本对比_入门试炼_09

    文章目录 一.单文件版本数据模拟 二.单文件版本对比 2.1. 查询单文件提交记录 2.2. 单文件版本之间差异对比 案例场景: 依次提交5次,推送远程,同一个文件5个版本之间的相互对比 一.单文件版 ...

  9. 用Jenkins自动化搭建测试环境_jenkins基础搭建_入门试炼02

    Jenkins基础: 本篇介绍Jenkins的安装.Jenkins中的常用插件的安装方法.Jenkins用户配置以及提醒邮件的配置. 接上一篇:使用Jenkins搭建自动化测试环境_环境准备_入门试炼 ...

最新文章

  1. 第一册:lesson seventeen。
  2. Spring3 MVC
  3. 图解TCP数据报结构以及三次握手(非常详细)
  4. 交叉编译器arm-linux-gcc
  5. 用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
  6. java应用程序怎样获取外接设备信号 通过usb
  7. 在登陆AD的机器上测试模拟经过验证的用户
  8. linux中哪个命令可以压缩部分文件,可以使用Linux解压缩命令,解压缩任意格式的压缩文件。...
  9. Mac和Linux下测试端口是否存活一法[转载]
  10. 狡兔死,良弓藏-每个王朝都一样
  11. vsan网络分区不在同一组
  12. 【原创】打造基于Dapper的数据访问层
  13. (转)比特币王国的内战与分裂|《财经》特稿
  14. 华擎J3455-ITX黑群晖6.2.3-25426搭建
  15. 如何在Windows 10上控制多个显示器的功能
  16. 继续教育公需课——人工智能技术及其发展趋势答案
  17. 【杂篇 · 电脑】买Macbook之后的一些记录
  18. Android 毕业设计高仿新浪微博客户端(内附源码)
  19. 记录一次minerd肉鸡木马的排查思路
  20. 关于java语言继承的说法正确的是_下列关于Java继承的说法中,正确的是( )

热门文章

  1. 不用数学讲清马尔可夫链蒙特卡洛方法?
  2. 世界上十大数据中心,全球数字经济顶梁柱
  3. zedgraph使用中的难题
  4. 拉力测试软件界面,电脑拉力机/电脑控制拉力试验机软件操作界面与功能
  5. windows驱动开发学习
  6. 阿里云边缘云ENS再升级 四大场景应用加速产业数字化落地
  7. 带你体验云原生场景下 Serverless 应用编程模型
  8. 实时计算pv/uv Demo
  9. 阿里云数据湖解决方案全面满足数据需求,帮助企业释放数据价值
  10. 优酷背后的大数据秘密:资源弹性,可支撑EB级存储