RabbitMQ的5种队列_Work模式_入门试炼_第5篇
文章目录
- 一、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篇相关推荐
- RabbitMQ的5种队列_简单队列_入门试炼_第4篇
Statement 文章目录 一.队列总览 1.1. 图示 1.2. 说明 二.简单队列 2.1. 图示 2.2. 导入RabbitMQ的客户端依赖 2.3. 获取MQ的连接 2.4. 生产者发送消息 ...
- RabbitMQ的5种队列_消息确认模式_入门试炼_第6篇
消费者从队列中获取消息,服务端如何知道消息已经被消费呢? 模式1:自动确认 只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成功消费. 模式2:手动确认 消费者从队列中获取消 ...
- RabbitMQ的5种队列_订阅模式_入门试炼_第7篇
解读: 1.1个生产者,多个消费者 2.每一个消费者都有自己的一个队列 3.生产者没有将消息直接发送到队列,而是发送到了交换机 4.每个队列都要绑定到交换机 5.生产者发送的消息,经过交换机,到达队列 ...
- RabbitMQ的5种队列_通配符模式_入门试炼_第8篇
5.9.2.生产者
- RabbitMQ的5种队列_路由模式_入门试炼_第8篇
生产者 5.8.3.费者1(前台系统) 消费2(搜索系统)
- RabbitMQ管理界面简述_入门试炼_第3篇
- RabbitMQ详解(三)------RabbitMQ的五种队列
目录 1.简单队列 2.work 模式 3.发布/订阅模式 4.路由模式 5.主题模式 6.四种交换器 7.总结 上一篇博客我们介绍了RabbitMQ消息通信中的一些基本概念,这篇博客我们介绍 Rab ...
- TortoiseGit 单文件版本对比_入门试炼_09
文章目录 一.单文件版本数据模拟 二.单文件版本对比 2.1. 查询单文件提交记录 2.2. 单文件版本之间差异对比 案例场景: 依次提交5次,推送远程,同一个文件5个版本之间的相互对比 一.单文件版 ...
- 用Jenkins自动化搭建测试环境_jenkins基础搭建_入门试炼02
Jenkins基础: 本篇介绍Jenkins的安装.Jenkins中的常用插件的安装方法.Jenkins用户配置以及提醒邮件的配置. 接上一篇:使用Jenkins搭建自动化测试环境_环境准备_入门试炼 ...
最新文章
- 第一册:lesson seventeen。
- Spring3 MVC
- 图解TCP数据报结构以及三次握手(非常详细)
- 交叉编译器arm-linux-gcc
- 用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
- java应用程序怎样获取外接设备信号 通过usb
- 在登陆AD的机器上测试模拟经过验证的用户
- linux中哪个命令可以压缩部分文件,可以使用Linux解压缩命令,解压缩任意格式的压缩文件。...
- Mac和Linux下测试端口是否存活一法[转载]
- 狡兔死,良弓藏-每个王朝都一样
- vsan网络分区不在同一组
- 【原创】打造基于Dapper的数据访问层
- (转)比特币王国的内战与分裂|《财经》特稿
- 华擎J3455-ITX黑群晖6.2.3-25426搭建
- 如何在Windows 10上控制多个显示器的功能
- 继续教育公需课——人工智能技术及其发展趋势答案
- 【杂篇 · 电脑】买Macbook之后的一些记录
- Android 毕业设计高仿新浪微博客户端(内附源码)
- 记录一次minerd肉鸡木马的排查思路
- 关于java语言继承的说法正确的是_下列关于Java继承的说法中,正确的是( )