RocketMQ 03 常用api

RocketMQ 03

消息

消息消费模式

消息消费模式由消费者来决定,可以由消费者设置MessageModel来决定消息模式。
消息模式默认为集群消费模式

  1. consumer.setMessageModel(MessageModel.BROADCASTING);
  2. consumer.setMessageModel(MessageModel.CLUSTERING);

集群消息

RocketMQ 03  常用api - 图1
集群消息是指集群化部署消费者
当使用集群消费模式时,MQ 认为任意一条消息只需要被集群内的任意一个消费者处理即可。
特点

  • 每条消息只需要被处理一次,broker只会把消息发送给消费集群中的一个消费者
  • 在消息重投时,不能保证路由到同一台机器上
  • 消费状态由broker维护

    广播消息

    RocketMQ 03  常用api - 图2
    当使用广播消费模式时,MQ 会将每条消息推送给集群内所有注册过的客户端,保证消息至少被每台机器消费一次。
    特点

  • 消费进度由consumer维护

  • 保证每个消费者消费一次消息
  • 消费失败的消息不会重投

    发送方式

    同步消息

    消息发送中进入同步等待状态,可以保证消息投递一定到达

    异步消息

    想要快速发送消息,又不想丢失的时候可以使用异步消息

    producer.send(message,new SendCallback() {
    
              public void onSuccess(SendResult sendResult) {
                  // TODO Auto-generated method stub
                  System.out.println("ok");
              }
    
              public void onException(Throwable e) {
                  // TODO Auto-generated method stub
                  e.printStackTrace();
                  System.out.println("err");
              }
          });
    

    单向消息

    只发送消息,不等待服务器响应,只发送请求不等待应答。此方式发送消息的过程耗时非常短,一般在微秒级别。

    producer.sendOneway(message);
    

    批量消息发送

    可以多条消息打包一起发送,减少网络传输次数提高效率。
    producer.send(Collection c)方法可以接受一个集合 实现批量发送

    public SendResult send(
          Collection<Message> msgs) throws MQClientException, RemotingException, MQBrokerException, InterruptedException {
          return this.defaultMQProducerImpl.send(batch(msgs));
      }
    
  • 批量消息要求必要具有同一topic、相同消息配置

  • 不支持延时消息
  • 建议一个批量消息最好不要超过1MB大小
  • 如果不确定是否超过限制,可以手动计算大小分批发送

    TAG

    可以使用tag来过滤消费
    在Producer中使用Tag:
    Message msg = new Message("TopicTest","TagA" ,("Hello RocketMQ " ).getBytes(RemotingHelper.DEFAULT_CHARSET));
    
    在Consumer中订阅Tag:
    consumer.subscribe("TopicTest", "TagA||TagB");// * 代表订阅Topic下的所有消息
    

    SQL表达式过滤

    消费者将收到包含TAGA或TAGB或TAGB的消息. 但限制是一条消息只能有一个标签,而这对于复杂的情况可能无效。 在这种情况下,您可以使用SQL表达式筛选出消息.

    配置

    broker.conf中添加配置
    enablePropertyFilter=true
    
    启动broker 加载指定配置文件
    ../bin/mqbroker -n 192.168.150.113:9876 -c broker.conf
    
    随后在集群配置中可以看到
    RocketMQ 03  常用api - 图3

    实例

    MessageSelector selector = MessageSelector.bySql("order > 5");
          consumer.subscribe("xxoo3", selector);
    

    语法

    RocketMQ只定义了一些基本的语法来支持这个功能。 你也可以很容易地扩展它.
  1. 数字比较, 像 >, >=, <, <=, BETWEEN, =;
  2. 字符比较, 像 =, <>, IN;
  3. IS NULL 或者 IS NOT NULL;
  4. 逻辑运算AND, OR, NOT;

常量类型是:

  1. 数字, 像123, 3.1415;
  2. 字符串, 像‘abc’,必须使用单引号;
  3. NULL, 特殊常数;
  4. 布尔常量, TRUEFALSE;

    延迟消息

    RocketMQ使用messageDelayLevel可以设置延迟投递
    默认配置为
    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,分别表示秒、分、时、天;

    使用

    发送消息时设置
    message.setDelayTimeLevel(1);
    

    顺序消费

    队列先天支持FIFO模型,单一生产和消费者下只要保证使用MessageListenerOrderly监听器即可
    顺序消费表示消息消费的顺序同生产者为每个消息队列发送的顺序一致,所以如果正在处理全局顺序是强制性的场景,需要确保使用的主题只有一个消息队列。
    并行消费不再保证消息顺序,消费的最大并行数量受每个消费者客户端指定的线程池限制。
    那么只要顺序的发送,再保证一个线程只去消费一个队列上的消息,那么他就是有序的。
    跟普通消息相比,顺序消息的使用需要在producer的send()方法中添加MessageQueueSelector接口的实现类,并重写select选择使用的队列,因为顺序消息局部顺序,需要将所有消息指定发送到同一队列中。
    保证有序参与因素
  • FIFO
  • 队列内保证有序
  • 消费线程

    重试机制

    producer

    默认超时时间

    /**
       * Timeout for sending messages.
       */
      private int sendMsgTimeout = 3000;
    
    // 异步发送时 重试次数,默认 2
      producer.setRetryTimesWhenSendAsyncFailed(1);
      // 同步发送时 重试次数,默认 2
      producer.setRetryTimesWhenSendFailed(1);    
    
      // 是否向其他broker发送请求 默认false
      producer.setRetryAnotherBrokerWhenNotStoreOK(true);
    

    Consumer

    消费超时,单位分钟
    consumer.setConsumeTimeout()
    发送ack,消费失败
    RECONSUME_LATER

    broker投递

    只有在消息模式为MessageModel.CLUSTERING集群模式时,Broker才会自动进行重试,广播消息不重试
    重投使用messageDelayLevel
    默认值

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

    事务消息

    分布式系统中的事务可以使用TCC(Try、Confirm、Cancel)、2pc来解决分布式系统中的消息原子性
    RocketMQ 4.3+提供分布事务功能,通过 RocketMQ 事务消息能达到分布式事务的最终一致

    RocketMQ实现方式

    Half Message:预处理消息,当broker收到此类消息后,会存储到RMQ_SYS_TRANS_HALF_TOPIC的消息消费队列中
    检查事务状态:Broker会开启一个定时任务,消费RMQ_SYS_TRANS_HALF_TOPIC队列中的消息,每次执行任务会向消息发送者确认事务执行状态(提交、回滚、未知),如果是未知,等待下一次回调。
    超时:如果超过回查次数,默认回滚消息

    TransactionListener的两个方法

    executeLocalTransaction

    半消息发送成功触发此方法来执行本地事务

    checkLocalTransaction

    broker将发送检查消息来检查事务状态,并将调用此方法来获取本地事务状态

    本地事务执行状态

    LocalTransactionState.COMMIT_MESSAGE
    执行事务成功,确认提交
    LocalTransactionState.ROLLBACK_MESSAGE
    回滚消息,broker端会删除半消息
    LocalTransactionState.UNKNOW
    暂时为未知状态,等待broker回查
    %23%20RocketMQ%2003%0A%0A%23%23%20%E6%B6%88%E6%81%AF%0A%0A%23%23%23%20%E6%B6%88%E6%81%AF%E6%B6%88%E8%B4%B9%E6%A8%A1%E5%BC%8F%0A%0A%E6%B6%88%E6%81%AF%E6%B6%88%E8%B4%B9%E6%A8%A1%E5%BC%8F%E7%94%B1%E6%B6%88%E8%B4%B9%E8%80%85%E6%9D%A5%E5%86%B3%E5%AE%9A%EF%BC%8C%E5%8F%AF%E4%BB%A5%E7%94%B1%E6%B6%88%E8%B4%B9%E8%80%85%E8%AE%BE%E7%BD%AEMessageModel%E6%9D%A5%E5%86%B3%E5%AE%9A%E6%B6%88%E6%81%AF%E6%A8%A1%E5%BC%8F%E3%80%82%0A%0A%0A%E6%B6%88%E6%81%AF%E6%A8%A1%E5%BC%8F%E9%BB%98%E8%AE%A4%E4%B8%BA%E9%9B%86%E7%BE%A4%E6%B6%88%E8%B4%B9%E6%A8%A1%E5%BC%8F%0A%0A%60%60%60%0A%20consumer.setMessageModel(MessageModel.BROADCASTING)%3B%0A%20consumer.setMessageModel(MessageModel.CLUSTERING)%3B%0A%60%60%60%0A%0A%23%23%23%23%20%E9%9B%86%E7%BE%A4%E6%B6%88%E6%81%AF%0A%0A!%5Bimg%5D(image-rocketMQ%2F160707_kSpS_1469576.png)%0A%0A%E9%9B%86%E7%BE%A4%E6%B6%88%E6%81%AF%E6%98%AF%E6%8C%87%E9%9B%86%E7%BE%A4%E5%8C%96%E9%83%A8%E7%BD%B2%E6%B6%88%E8%B4%B9%E8%80%85%0A%0A%E5%BD%93%E4%BD%BF%E7%94%A8%E9%9B%86%E7%BE%A4%E6%B6%88%E8%B4%B9%E6%A8%A1%E5%BC%8F%E6%97%B6%EF%BC%8CMQ%20%E8%AE%A4%E4%B8%BA%E4%BB%BB%E6%84%8F%E4%B8%80%E6%9D%A1%E6%B6%88%E6%81%AF%E5%8F%AA%E9%9C%80%E8%A6%81%E8%A2%AB%E9%9B%86%E7%BE%A4%E5%86%85%E7%9A%84%E4%BB%BB%E6%84%8F%E4%B8%80%E4%B8%AA%E6%B6%88%E8%B4%B9%E8%80%85%E5%A4%84%E7%90%86%E5%8D%B3%E5%8F%AF%E3%80%82%0A%0A%E7%89%B9%E7%82%B9%0A%0A-%20%E6%AF%8F%E6%9D%A1%E6%B6%88%E6%81%AF%E5%8F%AA%E9%9C%80%E8%A6%81%E8%A2%AB%E5%A4%84%E7%90%86%E4%B8%80%E6%AC%A1%EF%BC%8Cbroker%E5%8F%AA%E4%BC%9A%E6%8A%8A%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%E7%BB%99%E6%B6%88%E8%B4%B9%E9%9B%86%E7%BE%A4%E4%B8%AD%E7%9A%84%E4%B8%80%E4%B8%AA%E6%B6%88%E8%B4%B9%E8%80%85%0A-%20%E5%9C%A8%E6%B6%88%E6%81%AF%E9%87%8D%E6%8A%95%E6%97%B6%EF%BC%8C%E4%B8%8D%E8%83%BD%E4%BF%9D%E8%AF%81%E8%B7%AF%E7%94%B1%E5%88%B0%E5%90%8C%E4%B8%80%E5%8F%B0%E6%9C%BA%E5%99%A8%E4%B8%8A%0A-%20%E6%B6%88%E8%B4%B9%E7%8A%B6%E6%80%81%E7%94%B1broker%E7%BB%B4%E6%8A%A4%0A%0A%23%23%23%23%20%E5%B9%BF%E6%92%AD%E6%B6%88%E6%81%AF%0A%0A!%5Bimg%5D(image-rocketMQ%2F160902_4AOI_1469576.png)%0A%0A%E5%BD%93%E4%BD%BF%E7%94%A8%E5%B9%BF%E6%92%AD%E6%B6%88%E8%B4%B9%E6%A8%A1%E5%BC%8F%E6%97%B6%EF%BC%8CMQ%20%E4%BC%9A%E5%B0%86%E6%AF%8F%E6%9D%A1%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81%E7%BB%99%E9%9B%86%E7%BE%A4%E5%86%85%E6%89%80%E6%9C%89%E6%B3%A8%E5%86%8C%E8%BF%87%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%EF%BC%8C%E4%BF%9D%E8%AF%81%E6%B6%88%E6%81%AF%E8%87%B3%E5%B0%91%E8%A2%AB%E6%AF%8F%E5%8F%B0%E6%9C%BA%E5%99%A8%E6%B6%88%E8%B4%B9%E4%B8%80%E6%AC%A1%E3%80%82%0A%0A%E7%89%B9%E7%82%B9%0A%0A-%20%E6%B6%88%E8%B4%B9%E8%BF%9B%E5%BA%A6%E7%94%B1consumer%E7%BB%B4%E6%8A%A4%0A%0A-%20%E4%BF%9D%E8%AF%81%E6%AF%8F%E4%B8%AA%E6%B6%88%E8%B4%B9%E8%80%85%E6%B6%88%E8%B4%B9%E4%B8%80%E6%AC%A1%E6%B6%88%E6%81%AF%0A%0A-%20%E6%B6%88%E8%B4%B9%E5%A4%B1%E8%B4%A5%E7%9A%84%E6%B6%88%E6%81%AF%E4%B8%8D%E4%BC%9A%E9%87%8D%E6%8A%95%0A%0A%20%20%0A%0A%23%23%23%20%E5%8F%91%E9%80%81%E6%96%B9%E5%BC%8F%0A%0A%23%23%23%23%20%E5%90%8C%E6%AD%A5%E6%B6%88%E6%81%AF%0A%0A%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%E4%B8%AD%E8%BF%9B%E5%85%A5%E5%90%8C%E6%AD%A5%E7%AD%89%E5%BE%85%E7%8A%B6%E6%80%81%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BF%9D%E8%AF%81%E6%B6%88%E6%81%AF%E6%8A%95%E9%80%92%E4%B8%80%E5%AE%9A%E5%88%B0%E8%BE%BE%0A%0A%23%23%23%23%20%E5%BC%82%E6%AD%A5%E6%B6%88%E6%81%AF%0A%0A%E6%83%B3%E8%A6%81%E5%BF%AB%E9%80%9F%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF%EF%BC%8C%E5%8F%88%E4%B8%8D%E6%83%B3%E4%B8%A2%E5%A4%B1%E7%9A%84%E6%97%B6%E5%80%99%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E5%BC%82%E6%AD%A5%E6%B6%88%E6%81%AF%0A%0A%60%60%60java%0A%20%20%20%20%20%20%20%20%20producer.send(message%2Cnew%20SendCallback()%20%7B%0A%09%09%09%0A%09%09%09public%20void%20onSuccess(SendResult%20sendResult)%20%7B%0A%09%09%09%09%2F%2F%20TODO%20Auto-generated%20method%20stub%0A%09%09%09%09System.out.println(%22ok%22)%3B%0A%09%09%09%7D%0A%09%09%09%0A%09%09%09public%20void%20onException(Throwable%20e)%20%7B%0A%09%09%09%09%2F%2F%20TODO%20Auto-generated%20method%20stub%0A%09%09%09%09e.printStackTrace()%3B%0A%09%09%09%09System.out.println(%22err%22)%3B%0A%09%09%09%7D%0A%09%09%7D)%3B%0A%60%60%60%0A%0A%23%23%23%23%20%E5%8D%95%E5%90%91%E6%B6%88%E6%81%AF%0A%0A%E5%8F%AA%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF%EF%BC%8C%E4%B8%8D%E7%AD%89%E5%BE%85%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%93%8D%E5%BA%94%EF%BC%8C%E5%8F%AA%E5%8F%91%E9%80%81%E8%AF%B7%E6%B1%82%E4%B8%8D%E7%AD%89%E5%BE%85%E5%BA%94%E7%AD%94%E3%80%82%E6%AD%A4%E6%96%B9%E5%BC%8F%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF%E7%9A%84%E8%BF%87%E7%A8%8B%E8%80%97%E6%97%B6%E9%9D%9E%E5%B8%B8%E7%9F%AD%EF%BC%8C%E4%B8%80%E8%88%AC%E5%9C%A8%E5%BE%AE%E7%A7%92%E7%BA%A7%E5%88%AB%E3%80%82%0A%0A%60%60%60%0A%20producer.sendOneway(message)%3B%0A%60%60%60%0A%0A%0A%0A%23%23%23%20%E6%89%B9%E9%87%8F%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%0A%0A%E5%8F%AF%E4%BB%A5%E5%A4%9A%E6%9D%A1%E6%B6%88%E6%81%AF%E6%89%93%E5%8C%85%E4%B8%80%E8%B5%B7%E5%8F%91%E9%80%81%EF%BC%8C%E5%87%8F%E5%B0%91%E7%BD%91%E7%BB%9C%E4%BC%A0%E8%BE%93%E6%AC%A1%E6%95%B0%E6%8F%90%E9%AB%98%E6%95%88%E7%8E%87%E3%80%82%0A%0A%60producer.send(Collection%20c)%20%60%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E6%8E%A5%E5%8F%97%E4%B8%80%E4%B8%AA%E9%9B%86%E5%90%88%20%E5%AE%9E%E7%8E%B0%E6%89%B9%E9%87%8F%E5%8F%91%E9%80%81%0A%0A%60%60%60%0A%20public%20SendResult%20send(%0A%20%20%20%20%20%20%20%20Collection%3CMessage%3E%20msgs)%20throws%20MQClientException%2C%20RemotingException%2C%20MQBrokerException%2C%20InterruptedException%20%7B%0A%20%20%20%20%20%20%20%20return%20this.defaultMQProducerImpl.send(batch(msgs))%3B%0A%20%20%20%20%7D%0A%60%60%60%0A%0A%0A%0A-%20%E6%89%B9%E9%87%8F%E6%B6%88%E6%81%AF%E8%A6%81%E6%B1%82%E5%BF%85%E8%A6%81%E5%85%B7%E6%9C%89%E5%90%8C%E4%B8%80topic%E3%80%81%E7%9B%B8%E5%90%8C%E6%B6%88%E6%81%AF%E9%85%8D%E7%BD%AE%0A-%20%E4%B8%8D%E6%94%AF%E6%8C%81%E5%BB%B6%E6%97%B6%E6%B6%88%E6%81%AF%0A-%20%E5%BB%BA%E8%AE%AE%E4%B8%80%E4%B8%AA%E6%89%B9%E9%87%8F%E6%B6%88%E6%81%AF%E6%9C%80%E5%A5%BD%E4%B8%8D%E8%A6%81%E8%B6%85%E8%BF%871MB%E5%A4%A7%E5%B0%8F%0A-%20%E5%A6%82%E6%9E%9C%E4%B8%8D%E7%A1%AE%E5%AE%9A%E6%98%AF%E5%90%A6%E8%B6%85%E8%BF%87%E9%99%90%E5%88%B6%EF%BC%8C%E5%8F%AF%E4%BB%A5%E6%89%8B%E5%8A%A8%E8%AE%A1%E7%AE%97%E5%A4%A7%E5%B0%8F%E5%88%86%E6%89%B9%E5%8F%91%E9%80%81%0A%0A%23%23%23%20TAG%0A%0A%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8tag%E6%9D%A5%E8%BF%87%E6%BB%A4%E6%B6%88%E8%B4%B9%0A%0A%20%E5%9C%A8Producer%E4%B8%AD%E4%BD%BF%E7%94%A8Tag%EF%BC%9A%0A%0A%60%60%60%0AMessage%20msg%20%3D%20new%20Message(%22TopicTest%22%2C%22TagA%22%20%2C(%22Hello%20RocketMQ%20%22%20).getBytes(RemotingHelper.DEFAULT_CHARSET))%3B%0A%60%60%60%0A%0A%20%20%E5%9C%A8Consumer%E4%B8%AD%E8%AE%A2%E9%98%85Tag%EF%BC%9A%0A%0A%60%60%60%0Aconsumer.subscribe(%22TopicTest%22%2C%20%22TagA%7C%7CTagB%22)%3B%2F%2F%20%20%E4%BB%A3%E8%A1%A8%E8%AE%A2%E9%98%85Topic%E4%B8%8B%E7%9A%84%E6%89%80%E6%9C%89%E6%B6%88%E6%81%AF%0A%60%60%60%0A%0A%23%23%23%20SQL%E8%A1%A8%E8%BE%BE%E5%BC%8F%E8%BF%87%E6%BB%A4%0A%0A%E6%B6%88%E8%B4%B9%E8%80%85%E5%B0%86%E6%94%B6%E5%88%B0%E5%8C%85%E5%90%ABTAGA%E6%88%96TAGB%E6%88%96TAGB%E7%9A%84%E6%B6%88%E6%81%AF.%20%E4%BD%86%E9%99%90%E5%88%B6%E6%98%AF%E4%B8%80%E6%9D%A1%E6%B6%88%E6%81%AF%E5%8F%AA%E8%83%BD%E6%9C%89%E4%B8%80%E4%B8%AA%E6%A0%87%E7%AD%BE%EF%BC%8C%E8%80%8C%E8%BF%99%E5%AF%B9%E4%BA%8E%E5%A4%8D%E6%9D%82%E7%9A%84%E6%83%85%E5%86%B5%E5%8F%AF%E8%83%BD%E6%97%A0%E6%95%88%E3%80%82%20%E5%9C%A8%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E6%82%A8%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8SQL%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%AD%9B%E9%80%89%E5%87%BA%E6%B6%88%E6%81%AF.%0A%0A%23%23%23%23%20%E9%85%8D%E7%BD%AE%0A%0A%E5%9C%A8%60broker.conf%20%60%E4%B8%AD%E6%B7%BB%E5%8A%A0%E9%85%8D%E7%BD%AE%0A%0A%60%60%60%0AenablePropertyFilter%3Dtrue%0A%60%60%60%0A%0A%0A%0A%E5%90%AF%E5%8A%A8broker%20%E5%8A%A0%E8%BD%BD%E6%8C%87%E5%AE%9A%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%0A%0A%60%60%60%0A..%2Fbin%2Fmqbroker%20-n%20192.168.150.113%3A9876%20-c%20broker.conf%20%0A%60%60%60%0A%0A%E9%9A%8F%E5%90%8E%E5%9C%A8%E9%9B%86%E7%BE%A4%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%8F%AF%E4%BB%A5%E7%9C%8B%E5%88%B0%0A%0A!%5Bimage-20200219174859476%5D(image-rocketMQ%2Fimage-20200219174859476.png)%0A%0A%23%23%23%23%20%E5%AE%9E%E4%BE%8B%0A%0A%60%60%60%0A%20%20%20%20%20%20%20%20MessageSelector%20selector%20%3D%20MessageSelector.bySql(%22order%20%3E%205%22)%3B%0A%20%20%20%20%20%20%20%20consumer.subscribe(%22xxoo3%22%2C%20selector)%3B%0A%60%60%60%0A%0A%23%23%23%23%20%E8%AF%AD%E6%B3%95%0A%0ARocketMQ%E5%8F%AA%E5%AE%9A%E4%B9%89%E4%BA%86%E4%B8%80%E4%BA%9B%E5%9F%BA%E6%9C%AC%E7%9A%84%E8%AF%AD%E6%B3%95%E6%9D%A5%E6%94%AF%E6%8C%81%E8%BF%99%E4%B8%AA%E5%8A%9F%E8%83%BD%E3%80%82%20%E4%BD%A0%E4%B9%9F%E5%8F%AF%E4%BB%A5%E5%BE%88%E5%AE%B9%E6%98%93%E5%9C%B0%E6%89%A9%E5%B1%95%E5%AE%83.%0A%0A1.%20%E6%95%B0%E5%AD%97%E6%AF%94%E8%BE%83%2C%20%E5%83%8F%20%60%3E%60%2C%20%60%3E%3D%60%2C%20%60%3C%60%2C%20%60%3C%3D%60%2C%20%60BETWEEN%60%2C%20%60%3D%60%3B%0A2.%20%E5%AD%97%E7%AC%A6%E6%AF%94%E8%BE%83%2C%20%E5%83%8F%20%60%3D%60%2C%20%60%3C%3E%60%2C%20%60IN%60%3B%0A3.%20%60IS%20NULL%60%20%E6%88%96%E8%80%85%20%60IS%20NOT%20NULL%60%3B%0A4.%20%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%60AND%60%2C%20%60OR%60%2C%20%60NOT%60%3B%0A%0A%E5%B8%B8%E9%87%8F%E7%B1%BB%E5%9E%8B%E6%98%AF%3A%0A%0A1.%20%E6%95%B0%E5%AD%97%2C%20%E5%83%8F123%2C%203.1415%3B%0A2.%20%E5%AD%97%E7%AC%A6%E4%B8%B2%2C%20%E5%83%8F%E2%80%98abc%E2%80%99%2C%E5%BF%85%E9%A1%BB%E4%BD%BF%E7%94%A8%E5%8D%95%E5%BC%95%E5%8F%B7%3B%0A3.%20%60NULL%60%2C%20%E7%89%B9%E6%AE%8A%E5%B8%B8%E6%95%B0%3B%0A4.%20%E5%B8%83%E5%B0%94%E5%B8%B8%E9%87%8F%2C%20%60TRUE%60%20%E6%88%96%60FALSE%60%3B%0A%0A%23%23%23%20%E5%BB%B6%E8%BF%9F%E6%B6%88%E6%81%AF%0A%0ARocketMQ%E4%BD%BF%E7%94%A8messageDelayLevel%E5%8F%AF%E4%BB%A5%E8%AE%BE%E7%BD%AE%E5%BB%B6%E8%BF%9F%E6%8A%95%E9%80%92%0A%0A%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%E4%B8%BA%0A%0A%60%60%60%0AmessageDelayLevel%091s%205s%2010s%2030s%201m%202m%203m%204m%205m%206m%207m%208m%209m%2010m%2020m%2030m%201h%202h%0A%60%60%60%0A%0A%23%23%23%23%20%E9%85%8D%E7%BD%AE%0A%0A%E5%9C%A8%60broker.conf%20%60%E4%B8%AD%E6%B7%BB%E5%8A%A0%E9%85%8D%E7%BD%AE%0A%0A%60%60%60%0AmessageDelayLevel%3D1s%205s%2010s%2030s%201m%202m%203m%204m%205m%206m%207m%208m%209m%2010m%2020m%2030m%201h%202h%0A%60%60%60%0A%0A%E8%BF%99%E4%B8%AA%E9%85%8D%E7%BD%AE%E9%A1%B9%E9%85%8D%E7%BD%AE%E4%BA%86%E4%BB%8E1%E7%BA%A7%E5%BC%80%E5%A7%8B%EF%BC%8C%E5%90%84%E7%BA%A7%E5%BB%B6%E6%97%B6%E7%9A%84%E6%97%B6%E9%97%B4%EF%BC%8C%E5%8F%AF%E4%BB%A5%E4%BF%AE%E6%94%B9%E8%BF%99%E4%B8%AA%E6%8C%87%E5%AE%9A%E7%BA%A7%E5%88%AB%E7%9A%84%E5%BB%B6%E6%97%B6%E6%97%B6%E9%97%B4%EF%BC%9B%0A%0A%E6%97%B6%E9%97%B4%E5%8D%95%E4%BD%8D%E6%94%AF%E6%8C%81%EF%BC%9As%E3%80%81m%E3%80%81h%E3%80%81d%EF%BC%8C%E5%88%86%E5%88%AB%E8%A1%A8%E7%A4%BA%E7%A7%92%E3%80%81%E5%88%86%E3%80%81%E6%97%B6%E3%80%81%E5%A4%A9%EF%BC%9B%0A%0A%23%23%23%23%20%E4%BD%BF%E7%94%A8%0A%0A%E5%8F%91%E9%80%81%E6%B6%88%E6%81%AF%E6%97%B6%E8%AE%BE%E7%BD%AE%0A%0A%60%60%60%0Amessage.setDelayTimeLevel(1)%3B%20%0A%60%60%60%0A%0A%0A%0A%23%23%23%20%E9%A1%BA%E5%BA%8F%E6%B6%88%E8%B4%B9%0A%0A%E9%98%9F%E5%88%97%E5%85%88%E5%A4%A9%E6%94%AF%E6%8C%81FIFO%E6%A8%A1%E5%9E%8B%EF%BC%8C%E5%8D%95%E4%B8%80%E7%94%9F%E4%BA%A7%E5%92%8C%E6%B6%88%E8%B4%B9%E8%80%85%E4%B8%8B%E5%8F%AA%E8%A6%81%E4%BF%9D%E8%AF%81%E4%BD%BF%E7%94%A8%60MessageListenerOrderly%60%E7%9B%91%E5%90%AC%E5%99%A8%E5%8D%B3%E5%8F%AF%0A%0A%E9%A1%BA%E5%BA%8F%E6%B6%88%E8%B4%B9%E8%A1%A8%E7%A4%BA%E6%B6%88%E6%81%AF%E6%B6%88%E8%B4%B9%E7%9A%84%E9%A1%BA%E5%BA%8F%E5%90%8C%E7%94%9F%E4%BA%A7%E8%80%85%E4%B8%BA%E6%AF%8F%E4%B8%AA%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97%E5%8F%91%E9%80%81%E7%9A%84%E9%A1%BA%E5%BA%8F%E4%B8%80%E8%87%B4%EF%BC%8C%E6%89%80%E4%BB%A5%E5%A6%82%E6%9E%9C%E6%AD%A3%E5%9C%A8%E5%A4%84%E7%90%86%E5%85%A8%E5%B1%80%E9%A1%BA%E5%BA%8F%E6%98%AF%E5%BC%BA%E5%88%B6%E6%80%A7%E7%9A%84%E5%9C%BA%E6%99%AF%EF%BC%8C%E9%9C%80%E8%A6%81%E7%A1%AE%E4%BF%9D%E4%BD%BF%E7%94%A8%E7%9A%84%E4%B8%BB%E9%A2%98%E5%8F%AA%E6%9C%89%E4%B8%80%E4%B8%AA%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97%E3%80%82%0A%0A%E5%B9%B6%E8%A1%8C%E6%B6%88%E8%B4%B9%E4%B8%8D%E5%86%8D%E4%BF%9D%E8%AF%81%E6%B6%88%E6%81%AF%E9%A1%BA%E5%BA%8F%EF%BC%8C%E6%B6%88%E8%B4%B9%E7%9A%84%E6%9C%80%E5%A4%A7%E5%B9%B6%E8%A1%8C%E6%95%B0%E9%87%8F%E5%8F%97%E6%AF%8F%E4%B8%AA%E6%B6%88%E8%B4%B9%E8%80%85%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8C%87%E5%AE%9A%E7%9A%84%E7%BA%BF%E7%A8%8B%E6%B1%A0%E9%99%90%E5%88%B6%E3%80%82%0A%0A%E9%82%A3%E4%B9%88%E5%8F%AA%E8%A6%81%E9%A1%BA%E5%BA%8F%E7%9A%84%E5%8F%91%E9%80%81%EF%BC%8C%E5%86%8D%E4%BF%9D%E8%AF%81%E4%B8%80%E4%B8%AA%E7%BA%BF%E7%A8%8B%E5%8F%AA%E5%8E%BB%E6%B6%88%E8%B4%B9%E4%B8%80%E4%B8%AA%E9%98%9F%E5%88%97%E4%B8%8A%E7%9A%84%E6%B6%88%E6%81%AF%EF%BC%8C%E9%82%A3%E4%B9%88%E4%BB%96%E5%B0%B1%E6%98%AF%E6%9C%89%E5%BA%8F%E7%9A%84%E3%80%82%0A%0A%0A%0A%E8%B7%9F%E6%99%AE%E9%80%9A%E6%B6%88%E6%81%AF%E7%9B%B8%E6%AF%94%EF%BC%8C%E9%A1%BA%E5%BA%8F%E6%B6%88%E6%81%AF%E7%9A%84%E4%BD%BF%E7%94%A8%E9%9C%80%E8%A6%81%E5%9C%A8producer%E7%9A%84send()%E6%96%B9%E6%B3%95%E4%B8%AD%E6%B7%BB%E5%8A%A0MessageQueueSelector%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%AE%9E%E7%8E%B0%E7%B1%BB%EF%BC%8C%E5%B9%B6%E9%87%8D%E5%86%99select%E9%80%89%E6%8B%A9%E4%BD%BF%E7%94%A8%E7%9A%84%E9%98%9F%E5%88%97%EF%BC%8C%E5%9B%A0%E4%B8%BA%E9%A1%BA%E5%BA%8F%E6%B6%88%E6%81%AF%E5%B1%80%E9%83%A8%E9%A1%BA%E5%BA%8F%EF%BC%8C%E9%9C%80%E8%A6%81%E5%B0%86%E6%89%80%E6%9C%89%E6%B6%88%E6%81%AF%E6%8C%87%E5%AE%9A%E5%8F%91%E9%80%81%E5%88%B0%E5%90%8C%E4%B8%80%E9%98%9F%E5%88%97%E4%B8%AD%E3%80%82%0A%0A%0A%0A%E4%BF%9D%E8%AF%81%E6%9C%89%E5%BA%8F%E5%8F%82%E4%B8%8E%E5%9B%A0%E7%B4%A0%0A%0A-%20FIFO%0A-%20%E9%98%9F%E5%88%97%E5%86%85%E4%BF%9D%E8%AF%81%E6%9C%89%E5%BA%8F%0A-%20%E6%B6%88%E8%B4%B9%E7%BA%BF%E7%A8%8B%0A%0A%0A%0A%23%23%23%20%E9%87%8D%E8%AF%95%E6%9C%BA%E5%88%B6%0A%0A%23%23%23%23%20producer%0A%0A%E9%BB%98%E8%AE%A4%E8%B6%85%E6%97%B6%E6%97%B6%E9%97%B4%0A%0A%60%60%60%0A%20%20%20%20%2F**%0A%20%20%20%20%20%20Timeout%20for%20sending%20messages.%0A%20%20%20%20%20%2F%0A%20%20%20%20private%20int%20sendMsgTimeout%20%3D%203000%3B%0A%60%60%60%0A%0A%09%09%2F%2F%20%E5%BC%82%E6%AD%A5%E5%8F%91%E9%80%81%E6%97%B6%20%E9%87%8D%E8%AF%95%E6%AC%A1%E6%95%B0%EF%BC%8C%E9%BB%98%E8%AE%A4%202%0A%09%09producer.setRetryTimesWhenSendAsyncFailed(1)%3B%0A%09%09%2F%2F%20%E5%90%8C%E6%AD%A5%E5%8F%91%E9%80%81%E6%97%B6%20%E9%87%8D%E8%AF%95%E6%AC%A1%E6%95%B0%EF%BC%8C%E9%BB%98%E8%AE%A4%202%0A%09%09producer.setRetryTimesWhenSendFailed(1)%3B%09%0A%09%09%0A%09%09%2F%2F%20%E6%98%AF%E5%90%A6%E5%90%91%E5%85%B6%E4%BB%96broker%E5%8F%91%E9%80%81%E8%AF%B7%E6%B1%82%20%E9%BB%98%E8%AE%A4false%0A%09%09producer.setRetryAnotherBrokerWhenNotStoreOK(true)%3B%0A%23%23%23%23%20Consumer%0A%0A%E6%B6%88%E8%B4%B9%E8%B6%85%E6%97%B6%EF%BC%8C%E5%8D%95%E4%BD%8D%E5%88%86%E9%92%9F%0A%0A%60consumer.setConsumeTimeout()%60%0A%0A%E5%8F%91%E9%80%81ack%EF%BC%8C%E6%B6%88%E8%B4%B9%E5%A4%B1%E8%B4%A5%0A%0A%60RECONSUME_LATER%60%0A%0A%23%23%23%23%20broker%E6%8A%95%E9%80%92%0A%0A%E5%8F%AA%E6%9C%89%E5%9C%A8%E6%B6%88%E6%81%AF%E6%A8%A1%E5%BC%8F%E4%B8%BAMessageModel.CLUSTERING%E9%9B%86%E7%BE%A4%E6%A8%A1%E5%BC%8F%E6%97%B6%EF%BC%8CBroker%E6%89%8D%E4%BC%9A%E8%87%AA%E5%8A%A8%E8%BF%9B%E8%A1%8C%E9%87%8D%E8%AF%95%EF%BC%8C%E5%B9%BF%E6%92%AD%E6%B6%88%E6%81%AF%E4%B8%8D%E9%87%8D%E8%AF%95%0A%0A%E9%87%8D%E6%8A%95%E4%BD%BF%E7%94%A8%60messageDelayLevel%60%0A%0A%E9%BB%98%E8%AE%A4%E5%80%BC%0A%0A%60%60%60%0AmessageDelayLevel%091s%205s%2010s%2030s%201m%202m%203m%204m%205m%206m%207m%208m%209m%2010m%2020m%2030m%201h%202h%0A%60%60%60%0A%0A%0A%0A%0A%0A%23%23%23%20%E4%BA%8B%E5%8A%A1%E6%B6%88%E6%81%AF%0A%0A%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E4%BA%8B%E5%8A%A1%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8TCC%EF%BC%88Try%E3%80%81Confirm%E3%80%81Cancel%EF%BC%89%E3%80%812pc%E6%9D%A5%E8%A7%A3%E5%86%B3%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E6%B6%88%E6%81%AF%E5%8E%9F%E5%AD%90%E6%80%A7%0A%0ARocketMQ%204.3%2B%E6%8F%90%E4%BE%9B%E5%88%86%E5%B8%83%E4%BA%8B%E5%8A%A1%E5%8A%9F%E8%83%BD%EF%BC%8C%E9%80%9A%E8%BF%87%20RocketMQ%20%E4%BA%8B%E5%8A%A1%E6%B6%88%E6%81%AF%E8%83%BD%E8%BE%BE%E5%88%B0%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A1%E7%9A%84%E6%9C%80%E7%BB%88%E4%B8%80%E8%87%B4%0A%0A%23%23%23%23%20RocketMQ%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F%0A%0AHalf%20Message%EF%BC%9A%E9%A2%84%E5%A4%84%E7%90%86%E6%B6%88%E6%81%AF%EF%BC%8C%E5%BD%93broker%E6%94%B6%E5%88%B0%E6%AD%A4%E7%B1%BB%E6%B6%88%E6%81%AF%E5%90%8E%EF%BC%8C%E4%BC%9A%E5%AD%98%E5%82%A8%E5%88%B0RMQ_SYS_TRANS_HALF_TOPIC%E7%9A%84%E6%B6%88%E6%81%AF%E6%B6%88%E8%B4%B9%E9%98%9F%E5%88%97%E4%B8%AD%0A%0A%E6%A3%80%E6%9F%A5%E4%BA%8B%E5%8A%A1%E7%8A%B6%E6%80%81%EF%BC%9ABroker%E4%BC%9A%E5%BC%80%E5%90%AF%E4%B8%80%E4%B8%AA%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%EF%BC%8C%E6%B6%88%E8%B4%B9RMQ_SYS_TRANS_HALF_TOPIC%E9%98%9F%E5%88%97%E4%B8%AD%E7%9A%84%E6%B6%88%E6%81%AF%EF%BC%8C%E6%AF%8F%E6%AC%A1%E6%89%A7%E8%A1%8C%E4%BB%BB%E5%8A%A1%E4%BC%9A%E5%90%91%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%E8%80%85%E7%A1%AE%E8%AE%A4%E4%BA%8B%E5%8A%A1%E6%89%A7%E8%A1%8C%E7%8A%B6%E6%80%81%EF%BC%88%E6%8F%90%E4%BA%A4%E3%80%81%E5%9B%9E%E6%BB%9A%E3%80%81%E6%9C%AA%E7%9F%A5%EF%BC%89%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%98%AF%E6%9C%AA%E7%9F%A5%EF%BC%8C%E7%AD%89%E5%BE%85%E4%B8%8B%E4%B8%80%E6%AC%A1%E5%9B%9E%E8%B0%83%E3%80%82%0A%0A%E8%B6%85%E6%97%B6%EF%BC%9A%E5%A6%82%E6%9E%9C%E8%B6%85%E8%BF%87%E5%9B%9E%E6%9F%A5%E6%AC%A1%E6%95%B0%EF%BC%8C%E9%BB%98%E8%AE%A4%E5%9B%9E%E6%BB%9A%E6%B6%88%E6%81%AF%0A%0A%23%23%23%23%20TransactionListener%E7%9A%84%E4%B8%A4%E4%B8%AA%E6%96%B9%E6%B3%95%0A%0A%23%23%23%23%23%20executeLocalTransaction%0A%0A%E5%8D%8A%E6%B6%88%E6%81%AF%E5%8F%91%E9%80%81%E6%88%90%E5%8A%9F%E8%A7%A6%E5%8F%91%E6%AD%A4%E6%96%B9%E6%B3%95%E6%9D%A5%E6%89%A7%E8%A1%8C%E6%9C%AC%E5%9C%B0%E4%BA%8B%E5%8A%A1%0A%0A%23%23%23%23%23%20checkLocalTransaction%0A%0Abroker%E5%B0%86%E5%8F%91%E9%80%81%E6%A3%80%E6%9F%A5%E6%B6%88%E6%81%AF%E6%9D%A5%E6%A3%80%E6%9F%A5%E4%BA%8B%E5%8A%A1%E7%8A%B6%E6%80%81%EF%BC%8C%E5%B9%B6%E5%B0%86%E8%B0%83%E7%94%A8%E6%AD%A4%E6%96%B9%E6%B3%95%E6%9D%A5%E8%8E%B7%E5%8F%96%E6%9C%AC%E5%9C%B0%E4%BA%8B%E5%8A%A1%E7%8A%B6%E6%80%81%0A%0A%23%23%23%23%23%20%E6%9C%AC%E5%9C%B0%E4%BA%8B%E5%8A%A1%E6%89%A7%E8%A1%8C%E7%8A%B6%E6%80%81%0A%0ALocalTransactionState.COMMIT_MESSAGE%0A%0A%E6%89%A7%E8%A1%8C%E4%BA%8B%E5%8A%A1%E6%88%90%E5%8A%9F%EF%BC%8C%E7%A1%AE%E8%AE%A4%E6%8F%90%E4%BA%A4%0A%0ALocalTransactionState.ROLLBACK_MESSAGE%0A%0A%E5%9B%9E%E6%BB%9A%E6%B6%88%E6%81%AF%EF%BC%8Cbroker%E7%AB%AF%E4%BC%9A%E5%88%A0%E9%99%A4%E5%8D%8A%E6%B6%88%E6%81%AF%0A%0A*LocalTransactionState.UNKNOW%0A%0A%E6%9A%82%E6%97%B6%E4%B8%BA%E6%9C%AA%E7%9F%A5%E7%8A%B6%E6%80%81%EF%BC%8C%E7%AD%89%E5%BE%85broker%E5%9B%9E%E6%9F%A5%0A%0A