批量消息发送模式

  批量消息是指把消息放到一个集合统一进行提交,这种方案设计思路是希望消息在一个会话里,比如放到ThreadLocal里的集合,拥有相同

的会话ID,带有这次提交信息的size等属性,最重要的是吧这一批消息进行合并。对于channel就是发送一次消息。这种方式也是希望消费端在消

费的时候,可以进行批量化的消费,针对一个原子业务的操作进行处理,但是不保证可靠性,需要进行补偿机制。

图例:

伪代码思路:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BatchMessage {
private long sessionId;
private List<String> messageHolder = new ArrayList<>(); //用来保存message的集合
private int listSize; //集合的条数
}

把message放到ThreadLocal里面使用,这些批量的消息需要同一个sessionId,如果要入库,只是保存sessionId对应的消息集合,而不是每条消息

步骤:

  1、首先业务数据入库

  2、将批量消息对应的BatchMessage入库,状态为发送中

  3、发送message到Broker

  4、返回confirm确认

  5、修改状态为消费成功

  6、。。。。后面不讲了,和之前博客思路一样

延迟消息发送模式

使用场景:

  1、在电商平台买到的商品签收后,不点击确认支付,系统自动在一定时间进行支付操作

  2、自动超时作废的场景,你的优惠券/红包也有使用时限,也可以用延迟消息机制

实现:

  1、DLX和TTL:Consumer订阅DLX,Message发送到原Queue,设置TTL为30分钟。TTL到期,消息发送到DLX,然后被Consumer消费,就可以实现延迟队列

  2、rabbitmq 3.5.7及以上的版本提供了一个插件(rabbitmq-delayed-message-exchange)来实现延迟队列功能

安装、启用插件

Map<String, Object> headers = new HashMap<String, Object>();
headers.put("x-delay", 30*60*1000);
AMQP.BasicProperties.Builder props = new AMQP.BasicProperties.Builder().headers(headers);
channel.basicPublish("my-exchange", "", props.build(), messageBodyBytes);

最新文章

  1. C# 文件流基本操作步骤
  2. matlab中meshgrid函数的用法
  3. Delphi的windows剪切板操作函数
  4. oracle core 概述
  5. Dynamics CRM 窗体Javascript获取时间字段值的准确转换
  6. 纯javascript实现可拖住/大小的div
  7. [20180823]IMU与db link.txt
  8. elf格式转换为hex格式文件的两种方法
  9. echarts 调整图表大小的方法
  10. leetcode 90. subsets
  11. dubbo源码分析7——dubbo的配置解析_与spring的整合
  12. jqPlot图表插件学习之阴阳烛图
  13. 【openjudge】【前缀和】P6731啤酒厂选址
  14. samba 文件和目录权限控制
  15. Shiro的认证原理(Subject#login的背后故事)
  16. 日期函数new Date()浏览器兼容性问题
  17. width: 50%; display:inline-flex;
  18. Java 实现模板方法(TemplateMethod)模式
  19. ZOJ 3939 The Lucky Week (暴力找规律)
  20. poj 1723 Soldiers【中位数】By cellur925

热门文章

  1. leetcode第一刷_Best Time to Buy and Sell Stock
  2. web 开发之js---js 实现网页中播放wav的一种方法(flash播放器)
  3. 中国剩余定理模板&amp;俄罗斯乘法
  4. Hierarchyviewer定位Android图片资源的研究
  5. YTU 2633: P3 数钱是件愉快的事
  6. Java 过滤器、监听器、拦截器的区别
  7. JSP-Runoob:JSP 教程
  8. Mysql建表出现1005错误
  9. MyBatis高级查询 一对多映射
  10. Java多线程系列五——列表类