RocketMQ技术内幕:RocketMQ架构设计与实现原理(第2版)
上QQ阅读APP看书,第一时间看更新

3.2 认识RocketMQ消息

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

062-1

图3-4 RocketMQ消息类图

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

062-2

图3-5 RocketMQ消息Flag

代码清单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:消息发送时是否等消息存储完成后再返回。