RabbitMQ 一二事(2) - 工作队列使用
上篇文章讲了简单队列的使用,这其实就是RMQ给的demo,实际并没有什么用
本篇讲讲工作模式队列,也称之为任务队列
一个生产者发布了多条消息,消费者A可以接受消息,接受消息后该消息就消除,消费者B可以接受其他消息
使用场景,一些数据库操作比较缓慢的话可以分别给多个接口调用,降低压力,或者抢单场景也能考虑,
比如就10个商品,100个消费者来抢单,前10个抢到了后,消息队列就为空了,那么第11个以后的所有消费者都不会抢到
代码示例:
生产者
1 public class Send { 2 3 private final static String QUEUE_NAME = "test_queue_work"; 4 5 public static void main(String[] argv) throws Exception { 6 // 获取到连接以及mq通道 7 Connection connection = ConnectionUtil.getConnection(); 8 Channel channel = connection.createChannel(); 9 10 // 声明队列 11 channel.queueDeclare(QUEUE_NAME, false, false, false, null); 12 13 for (int i = 0; i < 50; i++) { 14 // 消息内容 15 String message = "" + i; 16 channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); 17 System.out.println(" [x] Sent '" + message + "'"); 18 19 Thread.sleep(i * 10); 20 } 21 22 channel.close(); 23 connection.close(); 24 } 25 }
消费者1
1 public class Recv { 2 3 private final static String QUEUE_NAME = "test_queue_work"; 4 5 public static void main(String[] argv) throws Exception { 6 7 // 获取到连接以及mq通道 8 Connection connection = ConnectionUtil.getConnection(); 9 Channel channel = connection.createChannel(); 10 11 // 声明队列 12 channel.queueDeclare(QUEUE_NAME, false, false, false, null); 13 14 // 同一时刻服务器只会发一条消息给消费者, 如果注释了就是指生产者平均分配任务给消费者 15 channel.basicQos(1); 16 17 // 定义队列的消费者 18 QueueingConsumer consumer = new QueueingConsumer(channel); 19 // 监听队列,手动返回完成 设置fasle代表需要手动返回消息的确认状态 20 channel.basicConsume(QUEUE_NAME, false, consumer); 21 22 // 获取消息 23 while (true) { 24 QueueingConsumer.Delivery delivery = consumer.nextDelivery(); 25 String message = new String(delivery.getBody()); 26 System.out.println(" [x] Received '" + message + "'"); 27 // 休眠 28 Thread.sleep(10); 29 // 手动确认 返回确认状态 30 channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); 31 } 32 } 33 }
消费者2
1 public class Recv2 { 2 3 private final static String QUEUE_NAME = "test_queue_work"; 4 5 public static void main(String[] argv) throws Exception { 6 7 // 获取到连接以及mq通道 8 Connection connection = ConnectionUtil.getConnection(); 9 Channel channel = connection.createChannel(); 10 11 // 声明队列 12 channel.queueDeclare(QUEUE_NAME, false, false, false, null); 13 14 // 同一时刻服务器只会发一条消息给消费者, 如果注释了就是指生产者平均分配任务给消费者 15 channel.basicQos(1); 16 17 // 定义队列的消费者 18 QueueingConsumer consumer = new QueueingConsumer(channel); 19 // 监听队列,手动返回完成状态 设置fasle代表需要手动返回消息的确认状态 20 channel.basicConsume(QUEUE_NAME, false, consumer); 21 22 // 获取消息 23 while (true) { 24 QueueingConsumer.Delivery delivery = consumer.nextDelivery(); 25 String message = new String(delivery.getBody()); 26 System.out.println(" [x] Received '" + message + "'"); 27 // 休眠1秒 28 Thread.sleep(1000); 29 // 手动确认 返回确认状态 30 channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); 31 } 32 } 33 }
转载于:https://www.cnblogs.com/leechenxiang/p/5516726.html
RabbitMQ 一二事(2) - 工作队列使用相关推荐
- RabbitMQ 一二事 - 简单队列使用
消息队列目前流行的有三种 1. RabbitMQ 2. ActiveMQ 3. Kafka 这三种都非常强大,RabbitMQ目前用的比较多,也比较流行,阿里也在用 ActiveMQ是阿帕奇出品,但是 ...
- RabbitMQ 一二事(4) - 路由模式介绍
路由模式其实和订阅模式差不多,只不过交换机的类型不同而已 路由模式可以用下图来表示,比订阅模式多了一个key,举个栗子就是根据不同的人群来订阅公众号,来收取消息 根据不同的key来获取不同的消息 最简 ...
- RabbitMQ六种队列模式-工作队列模式
前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 [本文] RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 RabbitMQ六种队列 ...
- python rabitmq_python使用rabbitmq实例二,工作队列
上一篇介绍了rabbitmq的安装和经典的hello world!实例.这里将对工作队列(Work Queues)做一个了解.因为是接上一篇说明的,所以如果没看过上一篇,看这篇可能会比较难理解.上一篇 ...
- 关于在校专利软著申请一二事
关于在校专利软著申请一二事 (不了解欢迎点进来,精通的也欢迎点进来指点一二) 今天小编想和大家讲一点关于在校专利申请的一些东西 通常一个专利的产生起源有两个: 1. 纯属个人灵感迸发 激发因素一般是: ...
- 程序员应该知道的一二事(4)
程序员应该知道的一二事 科普 开源 脚本 脚本语言和编程语言的区别是什么? 组成原理 先定义后赋值的理由 网络原理 五层 科普 开源 开源即开放源代码. 开放源代码(Open source code) ...
- RabbitMQ(二)工作队列
工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成.相反我们安排任务在之后执行.我们把任务封装为消息并将其发送到队列.在后台运行的工作进程将弹出任务并最终执行作业.当有 ...
- RabbitMQ教程C#版 - 工作队列
先决条件 本教程假定RabbitMQ已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助 如果您在阅读本教程时遇到困难,可以 ...
- 轻松搞定RabbitMQ(二)——工作队列之消息分发机制
上一篇博文中简单介绍了一下RabbitMQ的基础知识,并写了一个经典语言入门程序--HelloWorld.本篇博文中我们将会创建一个工作队列用来在工作者(consumer)间分发耗时任务.同样是翻译的 ...
最新文章
- matlab 多条函数颜色渐变(没多大用处)
- 用yum查询想安装的软件
- 【Pygame小游戏】别找了,休闲游戏专题来了丨泡泡龙小程序——休闲游戏研发推荐
- tensorflow调用问题解决
- Winform自动更新组件分享
- python itertool_函数式编程的Python实践(2):Itertool
- wget命令---Linux学习笔记
- 用我对HTML的点点理解来做个简单的百度首页
- php判断字符串里有英文,PHP针对中英文混合字符串长度判断及截取方法示例
- eclipse怎么修改java的行高_eclipse皮肤怎么修改 eclipse皮肤修改教程
- Error: Cannot create file “D:xampp\xampp-controlin“.拒绝访问。
- 又一款性能调优神器,真香!
- 网上订餐php论文,php032网上订餐系统
- 软件文档写作学习总结——绪论
- 【原创】Kinect for windows SDK 入门学习资源合辑
- 仙人掌相关问题的处理方法(未完待续)
- 疯狂java讲义第七章补充习题第12题答案
- Google Earth Engine(GEE)——下载2020-2021年的NDBI
- android 翻书动画效果怎么做,android ViewPager实现滑动翻页效果实例代码
- 【Vue】实战项目:电商后台管理系统(Element-UI)(一)前后端搭建 - 登录界面 - 主页界面