![RocketMQ技术内幕:RocketMQ架构设计与实现原理(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/686/40935686/b_40935686.jpg)
上QQ阅读APP看书,第一时间看更新
3.2 认识RocketMQ消息
RocketMQ消息封装类是org.apache.rocketmq.common.message.Message。RocketMQ消息类设计如图3-4所示。
![062-1](https://epubservercos.yuewen.com/33872A/21276926801738806/epubprivate/OEBPS/Images/062-1.jpg?sign=1739538696-ixrPxuRaaB1amhoTmZF6IeZsadPr0b6i-0-8251360834326ec4fa885f5441265479)
图3-4 RocketMQ消息类图
消息的基础属性主要包括消息所属主题(topic)、消息标记(RocketMQ不做处理)、扩展属性、消息体。RocketMQ定义的消息Flag如图3-5所示,消息全属性构造函数如代码清单3-1所示。
![062-2](https://epubservercos.yuewen.com/33872A/21276926801738806/epubprivate/OEBPS/Images/062-2.jpg?sign=1739538696-czJjiH1kqiwWx0hciGgkSBLeOUaTLB6v-0-9cf31d30ef0ba40c9b619e40185d8519)
图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:消息发送时是否等消息存储完成后再返回。