1
1
package com .sohu .index .tv .mq .common ;
2
2
3
- import java .nio .ByteBuffer ;
4
-
5
- import org .apache .rocketmq .common .message .MessageDecoder ;
3
+ import org .apache .rocketmq .common .message .Message ;
4
+ import org .apache .rocketmq .common .message .MessageClientExt ;
6
5
import org .apache .rocketmq .common .message .MessageExt ;
7
- import org .apache .rocketmq .common .sysflag .MessageSysFlag ;
8
6
9
7
/**
10
8
* 批量消息
15
13
* @param <MessageExt>
16
14
*/
17
15
public class MQMessage <T > {
16
+
17
+ public static final String IDEMPOTENT_ID = "IDEMPOTENT_ID" ;
18
+
19
+ // 发送的原始对象
18
20
private T message ;
19
- private MessageExt messageExt ;
20
21
21
- public MQMessage (T message , MessageExt messageExt ) {
22
+ // 可以重试的次数
23
+ private int retryTimes = -1 ;
24
+
25
+ // rocketmq 消息
26
+ private Message innerMessage ;
27
+
28
+ // 发送异常,测试用
29
+ private boolean exceptionForTest ;
30
+
31
+ public MQMessage () {
32
+ }
33
+
34
+ public MQMessage (T message , Message innerMessage ) {
22
35
this .message = message ;
23
- this .messageExt = messageExt ;
36
+ this .innerMessage = innerMessage ;
24
37
}
25
38
26
39
public T getMessage () {
@@ -32,22 +45,129 @@ public void setMessage(T message) {
32
45
}
33
46
34
47
public MessageExt getMessageExt () {
35
- return messageExt ;
48
+ return ( MessageExt ) innerMessage ;
36
49
}
37
50
38
51
public void setMessageExt (MessageExt messageExt ) {
39
- this . messageExt = messageExt ;
52
+ setInnerMessage ( messageExt ) ;
40
53
}
41
-
54
+
55
+ public Message getInnerMessage () {
56
+ return innerMessage ;
57
+ }
58
+
59
+ public void setInnerMessage (Message innerMessage ) {
60
+ this .innerMessage = innerMessage ;
61
+ }
62
+
63
+ public MQMessage <T > setKeys (String keys ) {
64
+ innerMessage .setKeys (keys );
65
+ return this ;
66
+ }
67
+
68
+ public String getKeys () {
69
+ return innerMessage .getKeys ();
70
+ }
71
+
72
+ public String getTags () {
73
+ return innerMessage .getTags ();
74
+ }
75
+
76
+ public MQMessage <T > setTags (String tags ) {
77
+ innerMessage .setTags (tags );
78
+ return this ;
79
+ }
80
+
81
+ public MQMessage <T > setDelayTimeLevel (int level ) {
82
+ innerMessage .setDelayTimeLevel (level );
83
+ return this ;
84
+ }
85
+
86
+ public int getDelayTimeLevel () {
87
+ return innerMessage .getDelayTimeLevel ();
88
+ }
89
+
90
+ public byte [] getBody () {
91
+ return innerMessage .getBody ();
92
+ }
93
+
94
+ public MQMessage <T > setBody (byte [] body ) {
95
+ innerMessage .setBody (body );
96
+ return this ;
97
+ }
98
+
99
+ public boolean isWaitStoreMsgOK () {
100
+ return innerMessage .isWaitStoreMsgOK ();
101
+ }
102
+
103
+ public MQMessage <T > setWaitStoreMsgOK (boolean waitStoreMsgOK ) {
104
+ innerMessage .setWaitStoreMsgOK (waitStoreMsgOK );
105
+ return this ;
106
+ }
107
+
108
+ public MQMessage <T > setTopic (String topic ) {
109
+ innerMessage .setTopic (topic );
110
+ return this ;
111
+ }
112
+
113
+ public String getTopic () {
114
+ return innerMessage .getTopic ();
115
+ }
116
+
117
+ public int getRetryTimes () {
118
+ return retryTimes ;
119
+ }
120
+
121
+ public MQMessage <T > setRetryTimes (int retryTimes ) {
122
+ this .retryTimes = retryTimes ;
123
+ return this ;
124
+ }
125
+
126
+ public MQMessage <T > resetRetryTimes (int retryTimes ) {
127
+ if (this .retryTimes == -1 ) {
128
+ this .retryTimes = retryTimes ;
129
+ }
130
+ return this ;
131
+ }
132
+
42
133
/**
43
134
* 构建offsetMsgId
135
+ *
44
136
* @return
45
137
*/
46
138
public String buildOffsetMsgId () {
47
- int msgIdLength = (messageExt .getSysFlag () & MessageSysFlag .STOREHOSTADDRESS_V6_FLAG ) == 0 ? 4 + 4 + 8
48
- : 16 + 4 + 8 ;
49
- ByteBuffer byteBufferMsgId = ByteBuffer .allocate (msgIdLength );
50
- return MessageDecoder .createMessageId (byteBufferMsgId , messageExt .getStoreHostBytes (),
51
- messageExt .getCommitLogOffset ());
139
+ return innerMessage instanceof MessageClientExt ? ((MessageClientExt )innerMessage ).getOffsetMsgId () : null ;
140
+ }
141
+
142
+ public static <T > MQMessage <T > build (T message ) {
143
+ MQMessage <T > mqMessage = new MQMessage <>();
144
+ mqMessage .setMessage (message );
145
+ mqMessage .innerMessage = new Message ();
146
+ mqMessage .setWaitStoreMsgOK (true );
147
+ return mqMessage ;
148
+ }
149
+
150
+ /**
151
+ * 设置幂等id
152
+ *
153
+ * @param idempotentId
154
+ */
155
+ public MQMessage <T > setIdempotentID (String idempotentId ) {
156
+ innerMessage .putUserProperty (IDEMPOTENT_ID , idempotentId );
157
+ return this ;
158
+ }
159
+
160
+ public MQMessage <T > setExceptionForTest (boolean exceptionForTest ) {
161
+ this .exceptionForTest = exceptionForTest ;
162
+ return this ;
163
+ }
164
+
165
+ public boolean isExceptionForTest () {
166
+ return exceptionForTest ;
167
+ }
168
+
169
+ @ Override
170
+ public String toString () {
171
+ return "[topic=" + getTopic () + ", message=" + message + ", retryTimes=" + retryTimes + "]" ;
52
172
}
53
173
}
0 commit comments