博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMQ延迟队列
阅读量:6710 次
发布时间:2019-06-25

本文共 1055 字,大约阅读时间需要 3 分钟。

rabbitmq延迟队列

rabbitmq实现延迟队列用了rabbitmq-delayed-message-exchange插件,需要提前安装,并启用。

原理

其原理是通过Exchange来实现延迟功能,即在Exchange中根据各个message的x-delay头设置延迟时间,时间到达后才发送到对应的queue,进而被queue消费。

实现

其实现方法为:

  • 正常我们申明一个Exchange只需要指定其类型(direct,fanout,topic等)即可,而声明延迟Exchange需要指定type为x-delayed-message,并通过参数x-delay-type指定其Exchange的类型(direct,fanout,topic等)。其实现如下:

    Map
    params = new HashMap<>();params.put("x-delay-type", "direct");channel.exchangeDeclare(exchangeName, "x-delayed-message", false, false, params);
  • 声明好Exchange之后,绑定任意队列即可

  • 发送消息的时候需要额外添加header,x-delay,用于设置延迟时间,单位:ms。实现如下:

    int delayMs = 5000;String msg1 = "delay message " + delayMs;Map
    headers = new HashMap<>();headers.put("x-delay", delayMs);AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().headers(headers).build();channel.basicPublish(exchangeName, "", props, msg1.getBytes("utf-8"));

性能影响

普通的Exchange收到message后直接推到queue,而延迟队列需要判断是否到达延迟时间,不到延迟时间的需要保存在表中,时间到了再捞出来推送,这些判断和操作导致效率不如普通的Exchange,所以如果不需要的话,就不要用延迟队列。

参考

转载于:https://www.cnblogs.com/chrischennx/p/7274556.html

你可能感兴趣的文章
解决C++代码单元测试中的难题-不可验证和IO调用
查看>>
1.[数据结构和算法分析笔记]数组
查看>>
两道非常容易理解错的OSPF问题. 加深理解LSA的概念和ABR/ASBR的概念.
查看>>
Migration系列教程(Chapter 1)
查看>>
Mysqli 扩展库增强-----预处理技术 mysqli stmt
查看>>
cacti+nagios_巨菜版
查看>>
监控服务器Cacti之四 用户授权及备份还原
查看>>
Struts2对Action提交方法进行验证
查看>>
hibernate之关于1+N的问题
查看>>
linux磁盘批量分区格式化和挂载脚本
查看>>
LVM配置与管理
查看>>
RAC节点服务ora.rac2.gsd的offline问题解决方法
查看>>
SharedPreferences小细节
查看>>
Configuring Default-network for EIGRP
查看>>
【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记32 NSNotification
查看>>
【嵌入式】探究bootloader,分析u-boot源码
查看>>
Oracle数据库通过定义TYPE及Member对象来实现日志信息的分级管理
查看>>
pb之autocommit
查看>>
UDT拥塞控制算法
查看>>
Bsidesiowa 2015 Track2: Secure Process Isolation With Docker By Greg Rice
查看>>