认识 RocketMQ 消息

RocketMQ 消息封装类是 org.apache.rocketmq.common.message.Message。RocketMQ 消息类设计如图3-4 所示。

image 2025 01 17 15 17 55 451
Figure 1. 图3-4 RocketMQ消息类图

消息的基础属性主要包括消息所属主题(topic)、消息标记(RocketMQ不做处理)、扩展属性、消息体。RocketMQ 定义的消息 Flag 如图3-5 所示,消息全属性构造函数如代码清单3-1 所示。

代码清单3-1 Message全属性构造函数
public Message(String topic, String tags, String keys, int flag, byte[] body, boolean waitStoreMsgOK) {
    this.topic = topic;
    this.flag = flag;
    this.body = body;

    if (tags != null && tags.length() > 0)
        this.setTags(tags);

    if (keys != null && keys.length() > 0)
        this.setKeys(keys);

    this.setWaitStoreMsgOK(waitStoreMsgOK);
}

public void setTags(String tags) {
    this.putProperty(MessageConst.PROPERTY_TAGS, tags);
}

public void setKeys(Collection<String> keys) {
    StringBuffer sb = new StringBuffer();

    for (String k : keys) {
        sb.append(k);
        sb.append(MessageConst.KEY_SEPARATOR);
    }

    this.setKeys(sb.toString().trim());
}

消息扩展属性如下。

  • tags:消息 tag,用于消息过滤。

  • keys:消息索引键,用空格隔开,RocketMQ 可以根据这些 key(键)快速检索消息。

  • waitStoreMsgOK:消息发送时是否等消息存储完成后再返回。