一、简介

Queue中的消息是按照顺序被分发到consumers的。然而,当你有多个consumers同时从相同的queue中提取消息时,

你将失去这个保证。因为这些消息是被多个线程并发的处理。有的时候,保证消息按照顺序处理是很重要的。

如,你可能不希望在插入订单操作结束之前执行更新这个订单的操作。

二、使用

ActiveMQ从4.x版本起开始支持Exclusive Consumer。 Broker会从多个consumers中挑选一个consumer来处理queue中

所有的消息,从而保证了消息的有序处理。如果这个consumer失效,那么broker会自动切换到其它的consumer。

可以通过DestinationOptions 来创建一个Exclusive Consumer,如下:

queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true");
consumer = session.createConsumer(queue);

还可以给consumer设置优先级,以便针对网络情况进行优化,如下:

queue = new ActiveMQQueue("TEST.QUEUE?consumer.exclusive=true&consumer.priority=10");

A.         当在接收信息的时候有一个或者多个备份接收消息者和一个独占消息者的同时接收时候,无论两者创建先后,在接收的时候,均为独占消息者接收。

B.         当在接收信息的时候,有多个独占消费者的时候,只有一个独占消费者可以接收到消息。

C.         当有多个备份消息者和多个独占消费者的时候,当所有的独占消费者均close的时候,只有一个备份消费者接到到消息。

解决一个队列并行问题:

通过排队服务

拆分业务逻辑 consumer 处理不同的业务,处理完后响应,确认消息消费成功,当10条全部消费完毕,

又或者是根据具体业务情况,例如只有8条消息处理成功,程序是继续执行,记录日志,事后处理,还是立即数据回滚?灵活处理

最新文章

  1. Spring5:@Autowired注解、@Resource注解和@Service注解
  2. ASP.NET程序开发范例宝典
  3. IUS database
  4. 八皇后java算法
  5. Android基于mAppWidget实现手绘地图(九)–如何处理地图对象的touch事件
  6. Django URL传递参数的方法总结(转)
  7. win7 共享问题,"您可能没有权限使用网络资源"
  8. 怎么解决/bin/sh: arm-linux-gcc: not found make
  9. .NET设计模式(13):享元模式(Flyweight Pattern)(转)
  10. Progress 自定义(一)-shape
  11. linux命令行后台运行与调回
  12. C语言-字符串文本串联
  13. sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
  14. quillJS 富文本编辑器源码分析系列1
  15. Java第一章
  16. LeetCode OJ 102. Binary Tree Level Order Traversal
  17. maven学习一(HelloWorld工程)
  18. 【3-30】document获取、事件、标记样式
  19. 苹果电脑thunderbolt连接两台电脑启动方法
  20. CALayer: autoresizingMask

热门文章

  1. Oracle数据库跟踪存储过程
  2. NOIP2017 时间复杂度 大模拟
  3. [Vue] vue的一些面试题
  4. 定义Vue-router的动态路由,获取传过来的动态参数
  5. 官宣!VS Code Python 全新功能在 PyCon China 全球首发!
  6. Vue.nextTick 的原理和用途
  7. JSON.parse()与JSON.stringify()和eval()使用方法详解
  8. python 服务器 cpu 监控程序--转
  9. pycharm 的一个小问题
  10. JavaScript调试技巧之断点调试