All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.aliyun.openservices.ons.api.Message Maven / Gradle / Ivy

There is a newer version: 2.0.7.Final
Show newest version
package com.aliyun.openservices.ons.api;

import java.io.Serializable;
import java.util.Properties;
import com.aliyun.openservices.ons.shaded.org.apache.rocketmq.client.message.MessageIdGenerator;
import com.aliyun.openservices.ons.shaded.org.apache.rocketmq.utility.UtilAll;

/**
 * 消息类. 一条消息由主题, 消息体以及可选的消息标签, 自定义附属键值对构成.
 *
 * 

注意: 我们对每条消息的自定义键值对的长度没有限制, 但所有的自定义键值对, 系统键值对序列化后, 所占空间不能超过32767字节.

*/ public class Message implements Serializable { private static final long serialVersionUID = -1385924226856188094L; /** *

系统属性

*/ final SystemProperties systemProperties; /** *

消息主题, 最长不超过255个字符; 由a-z, A-Z, 0-9, 以及中划线"-"和下划线"_"构成.

* *

一条合法消息本成员变量不能为空

*/ private String topic; /** * 用户属性 */ private Properties userProperties; /** *

消息体, 消息体长度默认不超过4M, 具体请参阅集群部署文档描述.

* *

一条合法消息本成员变量不能为空

*/ private byte[] body; /** * 默认构造函数; 必要属性后续通过Set方法设置. */ @Deprecated public Message() { this(null, "", "", null); } /** * 消息有参构造函数 * * @param topic 消息主题, 最长不超过255个字符; 由a-z, A-Z, 0-9, 以及中划线"-"和下划线"_"构成. * @param tag 消息标签, 合法标识符, 尽量简短且见名知意 * @param body 消息体, 消息体长度默认不超过4M, 具体请参阅集群部署文档描述. */ public Message(String topic, String tag, byte[] body) { this(topic, tag, "", body); } /** * 有参构造函数. * * @param topic 消息主题, 最长不超过255个字符; 由a-z, A-Z, 0-9, 以及中划线"-"和下划线"_"构成. * @param tag 消息标签, 请使用合法标识符, 尽量简短且见名知意 * @param key 业务主键 * @param body 消息体, 消息体长度默认不超过4M, 具体请参阅集群部署文档描述. */ public Message(String topic, String tag, String key, byte[] body) { this.topic = topic; if (null != body) { this.body = body.clone(); } else { this.body = null; } this.userProperties = new Properties(); this.systemProperties = new SystemProperties(); this.systemProperties.setTag(tag); this.systemProperties.setKey(key); this.systemProperties.setBornHost(UtilAll.hostName()); reset(); } Message(String topic, byte[] body, SystemProperties systemProperties, Properties userProperties) { this.topic = topic; this.body = body; this.systemProperties = systemProperties; this.userProperties = userProperties; } /** * 添加用户自定义属性键值对; 该键值对在消费消费时可被获取. * * @param key 自定义键 * @param value 对应值 */ public void putUserProperties(final String key, final String value) { if (key != null && value != null) { this.userProperties.put(key, value); reset(); } } /** * 获取用户自定义键的值 * * @param key 自定义键 * @return 用户自定义键值 */ public String getUserProperties(final String key) { return (String) this.userProperties.get(key); } /** * 获取消息的主题 * * @return 消息主题. */ public String getTopic() { return topic; } /** * 设置消息主题. * * @param topic 消息主题 */ public void setTopic(String topic) { this.topic = topic; reset(); } /** * 获取消息标签 * * @return 消息标签 */ public String getTag() { return this.systemProperties.getTag(); } /** * 设置消息标签 * * @param tag 标签. */ public void setTag(String tag) { this.systemProperties.setTag(tag); reset(); } /** * 获取业务码 * * @return 业务码 */ public String getKey() { return this.systemProperties.getKey(); } /** * 设置业务码 * * @param key 业务码 */ public void setKey(String key) { this.systemProperties.setKey(key); reset(); } /** * 获取消息ID * * @return 该消息ID */ public String getMsgID() { return this.systemProperties.getMsgId(); } /** * 设置该消息ID * * @param msgId 该消息ID. */ @Deprecated public void setMsgID(String msgId) { } public Properties getUserProperties() { return userProperties; } public void setUserProperties(Properties userProperties) { this.userProperties = userProperties; reset(); } public byte[] getBody() { if (null == body) { return null; } return body.clone(); } public void setBody(byte[] body) { if (null == body) { this.body = null; return; } this.body = body.clone(); reset(); } /** * 消息消费时, 获取消息已经被重试消费的次数 * * @return 重试消费次数. */ public int getReconsumeTimes() { return this.systemProperties.getReconsumeTimes(); } /** * 设置消息重试消费次数. * * @param reconsumeTimes 重试消费次数. */ @Deprecated public void setReconsumeTimes(final int reconsumeTimes) { } /** * 获取消息的生产时间 * * @return 消息的生产时间. */ public long getBornTimestamp() { return this.systemProperties.getBornTimestamp(); } /** * 设置消息的产生时间. * * @param bornTimestamp 消息生产时间. */ @Deprecated public void setBornTimestamp(final long bornTimestamp) { } /** * 获取产生消息的主机. * * @return 产生消息的主机 */ public String getBornHost() { return this.systemProperties.getBornHost(); } /** * 设置生产消息的主机 * * @param bornHost 生产消息的主机 */ @Deprecated public void setBornHost(final String bornHost) { } /** * 获取定时消息开始投递时间. * * @return 定时消息的开始投递时间. */ public long getStartDeliverTime() { return this.systemProperties.getStartDeliverTime(); } public String getShardingKey() { return this.systemProperties.getShardingKey(); } public void setShardingKey(final String shardingKey) { this.systemProperties.setShardingKey(shardingKey); reset(); } /** *

设置消息的定时投递时间(绝对时间),最大延迟时间为7天.

  1. 延迟投递: 延迟3s投递, 设置为: System.currentTimeMillis() + 3000;
  2. *
  3. 定时投递: 2016-02-01 11:30:00投递, 设置为: new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-02-01 * 11:30:00").getTime()
*/ public void setStartDeliverTime(final long startDeliverTime) { this.systemProperties.setStartDeliverTime(startDeliverTime); reset(); } /** * @return 该消息在所属 Partition 里的偏移量 */ public long getOffset() { return this.systemProperties.getPartitionOffset(); } private void reset() { this.systemProperties.setBornTimestamp(System.currentTimeMillis()); this.systemProperties.setMsgId(MessageIdGenerator.getInstance().next()); } /** * @return 该消息所属的 Partition */ @Deprecated public TopicPartition getTopicPartition() { throw new UnsupportedOperationException(); } @Override public String toString() { return "Message [topic=" + topic + ", systemProperties=" + systemProperties + ", userProperties=" + userProperties + ", bodyLength=" + (body != null ? body.length : 0) + "]"; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy