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<String, Object> 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<String, Object> 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,所以如果不需要的话,就不要用延迟队列。

参考

Github of rabbitmq-delayed-message-exchange

RabbitMQ延迟队列的更多相关文章

  1. C# RabbitMQ延迟队列功能实战项目演练

    一.需求背景 当用户在商城上进行下单支付,我们假设如果8小时没有进行支付,那么就后台自动对该笔交易的状态修改为订单关闭取消,同时给用户发送一份邮件提醒.那么我们应用程序如何实现这样的需求场景呢?在之前 ...

  2. RabbitMQ延迟队列插件安装

    RabbitMQ延迟队列插件安装 一.下载插件 下载地址:https://www.rabbitmq.com/community-plugins.html 二.把下载的插件放到指定位置 下载的文件为zi ...

  3. C#实现rabbitmq 延迟队列功能

    最近在研究rabbitmq,项目中有这样一个场景:在用户要支付订单的时候,如果超过30分钟未支付,会把订单关掉.当然我们可以做一个定时任务,每个一段时间来扫描未支付的订单,如果该订单超过支付时间就关闭 ...

  4. Spring Boot(十四)RabbitMQ延迟队列

    一.前言 延迟队列的使用场景:1.未按时支付的订单,30分钟过期之后取消订单:2.给活跃度比较低的用户间隔N天之后推送消息,提高活跃度:3.过1分钟给新注册会员的用户,发送注册邮件等. 实现延迟队列的 ...

  5. rabbitmq延迟队列demo

    1. demo详解 1.1 工程结构: 1.2 pom 定义jar包依赖的版本.版本很重要,rabbit依赖spring,两者必须相一致,否则报错: <properties> <sp ...

  6. Spring RabbitMQ 延迟队列

    一.说明 在实际业务场景中可能会用到延时消息发送,例如异步回调失败时的重发机制. RabbitMQ本身不具有延时消息队列的功能,但是可以通过rabbitmq-delayed-message-excha ...

  7. RabbitMQ 延迟队列,消息延迟推送

    目录 应用场景 消息延迟推送的实现 测试结果 应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给 ...

  8. Spring Boot (26) RabbitMQ延迟队列

    延迟消息就是指当消息被发送以后,并不想让消费者立即拿到消息,而是等待指定时间后,消费者才拿到这个消息进行消费. 延迟队列 订单业务: 在电商/点餐中,都有下单后30分钟内没有付款,就自动取消订单. 短 ...

  9. RabbitMQ 延迟队列实现订单支付结果异步阶梯性通知

    在第三方支付中,例如支付宝.或者微信,对于订单请求,第三方支付系统采用的是消息同步返回.异步通知+主动补偿查询的补偿机制. 由于互联网通信的不可靠性,例如双方网络.服务器.应用等因素的影响,不管是同步 ...

随机推荐

  1. POSTFIX服务简介

    传统的Sendmail将所有功能都集中在同一个程序里,这种结构我们称之为“单体式设计”(monolithic).Postfix采用专职负责的策略,不同的功能分别交由不同的专门程序处理,这种结构称为“模 ...

  2. nodejs(二)

    nodejs第二章节 回调函数 Node.js 异步编程的直接体现就是回调 异步编程依托于回调来实现 例子1:http服务器回调 var http = require(“http”);//引入一个ht ...

  3. Webpack4.x 入门

    概览 新建项目 npm init -y 安装webpack & webpack-cli (c)npm install -D webpack (c)npm install -D webpack- ...

  4. UNIX或LINUX时间戳转时间

    ORACLE: select TO_DATE('19700101', 'yyyymmdd') + 1481148929 / 86400 + TO_NUMBER(SUBSTR(TZ_OFFSET(ses ...

  5. 观 浅谈HTTP中Get与Post的区别

    看完解决了一些模糊不清的.错误的理解.

  6. linux内核获取当前进程路径分析

    一个简单的问题,·linux下获取当前进程.我们都知道在内核中获取当前进程可以利用current宏 #define get_current() (current_thread_info()->t ...

  7. LInux进程虚拟地址空间的管理

    2017-04-07 脱离物理内存的管理,今天咱们来聊聊进程虚拟内存的管理.因为进程直接分配和使用的都是虚拟内存,而物理内存则是有系统“按需”分配给进程,在进程看来,只知道虚拟内存的存在! 前言: 关 ...

  8. finecms万能标签list列表使用方法

    我们在用finecms建站时经常会用到调用文章列表的功能,这时我们可以用万能标签list来实现,当然还可以调用其他一些数据,下面我们就来看看list函数的相关参数和使用方法 action 支持&quo ...

  9. 基于rman的坏块恢复

    转载请注明出处 http://blog.csdn.net/guoyjoe/article/details/30965303   实验过程例如以下: 1.使用rman备份全库 Recovery Mana ...

  10. 16.遇到就jar mismatch! Fix your dependencies的问题

    这是因为两个项目的jar包(android-support-v4.jar)不一致. 解决方法是把2个jar都删除,然后各自加上最新的jar包 但是换了之后发现R文件编不出来,原因是minsdk的设置问 ...