|
23 | 23 | import org.apache.rocketmq.client.producer.LocalTransactionState; |
24 | 24 | import org.apache.rocketmq.client.producer.TransactionListener; |
25 | 25 | import org.apache.rocketmq.common.message.Message; |
| 26 | +import org.apache.rocketmq.common.message.MessageConst; |
26 | 27 | import org.apache.rocketmq.common.message.MessageExt; |
27 | 28 | import org.apache.rocketmq.remoting.RPCHook; |
28 | 29 | import org.apache.rocketmq.spring.core.RocketMQLocalTransactionState; |
|
31 | 32 | import org.springframework.messaging.MessageHeaders; |
32 | 33 | import org.springframework.messaging.MessagingException; |
33 | 34 | import org.springframework.messaging.support.MessageBuilder; |
| 35 | +import org.springframework.util.CollectionUtils; |
34 | 36 | import org.springframework.util.StringUtils; |
35 | 37 | import org.slf4j.Logger; |
36 | 38 | import org.slf4j.LoggerFactory; |
37 | 39 | import java.nio.charset.Charset; |
| 40 | +import java.util.Map; |
38 | 41 | import java.util.Objects; |
39 | 42 |
|
40 | 43 | public class RocketMQUtil { |
@@ -77,37 +80,48 @@ public static MessagingException convert(MQClientException e) { |
77 | 80 |
|
78 | 81 | public static org.springframework.messaging.Message convertToSpringMessage( |
79 | 82 | org.apache.rocketmq.common.message.MessageExt message) { |
80 | | - org.springframework.messaging.Message retMessage = |
| 83 | + MessageBuilder messageBuilder = |
81 | 84 | MessageBuilder.withPayload(message.getBody()). |
82 | | - setHeader(RocketMQHeaders.KEYS, message.getKeys()). |
83 | | - setHeader(RocketMQHeaders.TAGS, message.getTags()). |
84 | | - setHeader(RocketMQHeaders.TOPIC, message.getTopic()). |
85 | | - setHeader(RocketMQHeaders.MESSAGE_ID, message.getMsgId()). |
86 | | - setHeader(RocketMQHeaders.BORN_TIMESTAMP, message.getBornTimestamp()). |
87 | | - setHeader(RocketMQHeaders.BORN_HOST, message.getBornHostString()). |
88 | | - setHeader(RocketMQHeaders.FLAG, message.getFlag()). |
89 | | - setHeader(RocketMQHeaders.QUEUE_ID, message.getQueueId()). |
90 | | - setHeader(RocketMQHeaders.SYS_FLAG, message.getSysFlag()). |
91 | | - setHeader(RocketMQHeaders.TRANSACTION_ID, message.getTransactionId()). |
92 | | - setHeader(RocketMQHeaders.PROPERTIES, message.getProperties()). |
93 | | - build(); |
94 | | - |
95 | | - return retMessage; |
| 85 | + setHeader(toRocketHeaderKey(RocketMQHeaders.KEYS), message.getKeys()). |
| 86 | + setHeader(toRocketHeaderKey(RocketMQHeaders.TAGS), message.getTags()). |
| 87 | + setHeader(toRocketHeaderKey(RocketMQHeaders.TOPIC), message.getTopic()). |
| 88 | + setHeader(toRocketHeaderKey(RocketMQHeaders.MESSAGE_ID), message.getMsgId()). |
| 89 | + setHeader(toRocketHeaderKey(RocketMQHeaders.BORN_TIMESTAMP), message.getBornTimestamp()). |
| 90 | + setHeader(toRocketHeaderKey(RocketMQHeaders.BORN_HOST), message.getBornHostString()). |
| 91 | + setHeader(toRocketHeaderKey(RocketMQHeaders.FLAG), message.getFlag()). |
| 92 | + setHeader(toRocketHeaderKey(RocketMQHeaders.QUEUE_ID), message.getQueueId()). |
| 93 | + setHeader(toRocketHeaderKey(RocketMQHeaders.SYS_FLAG), message.getSysFlag()). |
| 94 | + setHeader(toRocketHeaderKey(RocketMQHeaders.TRANSACTION_ID), message.getTransactionId()); |
| 95 | + addUserProperties(message.getProperties(), messageBuilder); |
| 96 | + return messageBuilder.build(); |
| 97 | + } |
| 98 | + |
| 99 | + public static String toRocketHeaderKey(String rawKey) { |
| 100 | + return RocketMQHeaders.PREFIX + rawKey; |
| 101 | + } |
| 102 | + |
| 103 | + private static void addUserProperties(Map<String, String> properties, MessageBuilder messageBuilder) { |
| 104 | + if (!CollectionUtils.isEmpty(properties)) { |
| 105 | + properties.forEach((key, val) -> { |
| 106 | + if (!MessageConst.STRING_HASH_SET.contains(key) && !MessageHeaders.ID.equals(key) |
| 107 | + && !MessageHeaders.TIMESTAMP.equals(key)) { |
| 108 | + messageBuilder.setHeader(key, val); |
| 109 | + } |
| 110 | + }); |
| 111 | + } |
96 | 112 | } |
97 | 113 |
|
98 | 114 | public static org.springframework.messaging.Message convertToSpringMessage( |
99 | 115 | org.apache.rocketmq.common.message.Message message) { |
100 | | - org.springframework.messaging.Message retMessage = |
| 116 | + MessageBuilder messageBuilder = |
101 | 117 | MessageBuilder.withPayload(message.getBody()). |
102 | | - setHeader(RocketMQHeaders.KEYS, message.getKeys()). |
103 | | - setHeader(RocketMQHeaders.TAGS, message.getTags()). |
104 | | - setHeader(RocketMQHeaders.TOPIC, message.getTopic()). |
105 | | - setHeader(RocketMQHeaders.FLAG, message.getFlag()). |
106 | | - setHeader(RocketMQHeaders.TRANSACTION_ID, message.getTransactionId()). |
107 | | - setHeader(RocketMQHeaders.PROPERTIES, message.getProperties()). |
108 | | - build(); |
109 | | - |
110 | | - return retMessage; |
| 118 | + setHeader(toRocketHeaderKey(RocketMQHeaders.KEYS), message.getKeys()). |
| 119 | + setHeader(toRocketHeaderKey(RocketMQHeaders.TAGS), message.getTags()). |
| 120 | + setHeader(toRocketHeaderKey(RocketMQHeaders.TOPIC), message.getTopic()). |
| 121 | + setHeader(toRocketHeaderKey(RocketMQHeaders.FLAG), message.getFlag()). |
| 122 | + setHeader(toRocketHeaderKey(RocketMQHeaders.TRANSACTION_ID), message.getTransactionId()); |
| 123 | + addUserProperties(message.getProperties(), messageBuilder); |
| 124 | + return messageBuilder.build(); |
111 | 125 | } |
112 | 126 |
|
113 | 127 | public static org.apache.rocketmq.common.message.Message convertToRocketMessage( |
@@ -160,11 +174,12 @@ public static org.apache.rocketmq.common.message.Message convertToRocketMessage( |
160 | 174 | rocketMsg.setWaitStoreMsgOK(waitStoreMsgOK); |
161 | 175 |
|
162 | 176 | headers.entrySet().stream() |
163 | | - .filter(entry -> !Objects.equals(entry.getKey(), RocketMQHeaders.KEYS) |
164 | | - && !Objects.equals(entry.getKey(), "FLAG") |
165 | | - && !Objects.equals(entry.getKey(), "WAIT_STORE_MSG_OK")) // exclude "KEYS", "FLAG", "WAIT_STORE_MSG_OK" |
| 177 | + .filter(entry -> !Objects.equals(entry.getKey(), "FLAG") |
| 178 | + && !Objects.equals(entry.getKey(), "WAIT_STORE_MSG_OK")) // exclude "FLAG", "WAIT_STORE_MSG_OK" |
166 | 179 | .forEach(entry -> { |
167 | | - rocketMsg.putUserProperty("USERS_" + entry.getKey(), String.valueOf(entry.getValue())); // add other properties with prefix "USERS_" |
| 180 | + if (!MessageConst.STRING_HASH_SET.contains(entry.getKey())) { |
| 181 | + rocketMsg.putUserProperty(entry.getKey(), String.valueOf(entry.getValue())); |
| 182 | + } |
168 | 183 | }); |
169 | 184 |
|
170 | 185 | } |
|
0 commit comments