咨询一下大佬们。Apache RocketMQ中Message 中包含的 flag 属性,有什么特?

咨询一下大佬们。Apache RocketMQ中Message 中包含的 flag 属性,有什么特殊用处吗?image.png 看了一下代码提交记录,应该是设计之初就加了该字段,但是没找到说明,官方文档也没有说明。

展开
收起
真的很搞笑 2023-05-23 20:03:33 191 分享 版权
1 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    Apache RocketMQ中的消息(Message)对象包含一个flag属性,它是一个int类型的整数,用于控制消息的一些特殊标志。具体来说,flag属性的作用如下:

    1. 事务消息 如果想要将消息发送为事务消息,可以将flag设置为MessageConst.PROPERTY_TRANSACTION_PREPARED。RocketMQ中支持两种事务消息的处理方式:预处理(Prepared)和提交(Commit)。在向发送半消息时,可以将flag设置为MessageConst.PROPERTY_TRANSACTION_PREPARED,表示这是一个预处理事务消息。在事务消息处理器将事务状态更改为提交或回滚时,再发送提交或回滚的消息,这些消息的flag中应该是MessageConst.PROPERTY_TRANSACTION_COMMITMessageConst.PROPERTY_TRANSACTION_ROLLBACK

    2. 批量消息 如果想要将消息发送为批量消息,可以将flag设置为MessageConst.PROPERTY_BATCH。同一个批量消息中可以包含多条消息,每条消息的key和tag应该相同。发送批量消息可以提高消息的发送效率,但是会影响消息的可靠性。

    3. 压缩消息 如果想要对消息进行压缩,可以将flag设置为MessageConst.PROPERTY_COMPRESS。RocketMQ支持自定义的消息压缩算法,将消息压缩后可以节省存储空间和网络带宽。

    例如,下面的代码演示了如何使用 flag 属性将消息发送为批量消息:

    import org.apache.rocketmq.common.message.Message;
    import org.apache.rocketmq.common.message.MessageConst;
    
    // 创建一组相同的消息
    Message msg1 = new Message("TopicTest", "TagA", "key1", "Hello RocketMQ 1".getBytes());
    Message msg2 = new Message("TopicTest", "TagA", "key1", "Hello RocketMQ 2".getBytes());
    Message msg3 = new Message("TopicTest", "TagA", "key1", "Hello RocketMQ 3".getBytes());
    
    // 设置批量发送的标志位
    msg1.putUserProperty(MessageConst.PROPERTY_BATCH, "true");
    msg2.putUserProperty(MessageConst.PROPERTY_BATCH, "true");
    msg3.putUserProperty(MessageConst.PROPERTY_BATCH, "true");
    
    // 将消息发送到Broker
    producer.send(Arrays.asList(msg1, msg2, msg3));
    

    flag 属性并不是必须设置的,通常情况下可以使用默认值。

    2023-05-23 23:07:42
    赞同 展开评论

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系列产品 Serverless 化。RocketMQ 中文社区:https://rocketmq-learning.com/

收录在圈子:
+ 订阅
阿里云 云原生应用平台 肩负阿里巴巴集团基础设施云化以及核心技术互联网化的重要职责,致力于打造稳定、标准、先进的云原生产品,成为云原生时代的引领者,推动行业全面想云原生的技术升级,成为阿里云新增长引擎。商业化产品包括容器、云原生中间件、函数计算等。
还有其他疑问?
咨询AI助理