RocketMQ(三)——————javaAPI (9.延迟消息)

 

RocketMQ使用 messageDelayLevel 可以设置延迟投递:

现在RocketMq并不支持任意时间的延时,需要设置几个固定的延时等级,

从1s到2h分别对应着等级1到18 消息消费失败会进入延时消息队列,

消息发送时间与设置的延时等级和重试次数有关


默认配置为:

messageDelayLevel 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h


更改配置:

在`broker.conf `中添加配置

messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h


这个配置项配置了从1级开始,各级延时的时间,可以修改这个指定级别的延时时间;

时间单位支持:s、m、h、d,分别表示秒、分、时;

java使用:

发送消息时 可设置 延时等级

message.setDelayTimeLevel(1);

 

1、生产者样例

发送延时消息

    //官网示例
   public static void main(String[] args) throws Exception {
      // 实例化一个生产者来产生延时消息
      DefaultMQProducer producer = new DefaultMQProducer("ExampleProducerGroup");
      // 启动生产者
      producer.start();
      int totalMessagesToSend = 100;
      for (int i = 0; i < totalMessagesToSend; i++) {
          Message message = new Message("TestTopic", ("Hello scheduled message " + i).getBytes());
          // 设置延时等级3,这个消息将在10s之后发送(现在只支持固定的几个时间,详看delayTimeLevel)
          message.setDelayTimeLevel(3);
          // 发送消息
          producer.send(message);
      }
       // 关闭生产者
      producer.shutdown();
  }

 

2、消费者样例

启动消费者等待传入订阅消息
 
    //官网示例
   public static void main(String[] args) throws Exception {
      // 实例化消费者
      DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ExampleConsumer");
      // 订阅Topics
      consumer.subscribe("TestTopic", "*");
      // 注册消息监听者
      consumer.registerMessageListener(new MessageListenerConcurrently() {
          @Override
          public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> messages, ConsumeConcurrentlyContext context) {
              for (MessageExt message : messages) {
                  // Print approximate delay time period
                  System.out.println("Receive message[msgId=" + message.getMsgId() + "] " + (System.currentTimeMillis() - message.getStoreTimestamp()) + "ms later");
              }
              return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
          }
      });
      // 启动消费者
      consumer.start();
  }

 

posted @ 2021-03-30 17:55  Li&Fan  阅读(452)  评论(0编辑  收藏  举报