zoukankan      html  css  js  c++  java
  • RabbitMQ延迟队列

    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

  • 相关阅读:
    jdbc在项目中的应用
    第五次作业-springmvc对表单的获取
    jquery的文档处理(部分)
    测试报告怎么写合理
    WebService的简单应用
    hdu--5078--orz
    hdu--5074--dp
    hdu--5108--数论
    hdu--5072--容斥原理
    hdu--3853--概率dp
  • 原文地址:https://www.cnblogs.com/chrischennx/p/7274556.html
Copyright © 2011-2022 走看看