/
RequestReplyMessageDemo.java
102 lines (80 loc) · 4.09 KB
/
RequestReplyMessageDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package org.apache.rocketmqdemos;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.utils.MessageUtil;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import java.util.List;
// request reply消息demo
public class RequestReplyMessageDemo {
public static String NAMESRV_ADDR = "127.0.0.1:9876";
public static String TOPIC = "tiger_request_topic_01";
public static String PRODUCER_GROUP_NAME = "tiger_producer_group_request";
public static void main(String args[]) throws MQClientException, InterruptedException {
if (args != null && args.length > 0) {
NAMESRV_ADDR = args[0];
}
new Thread(() -> {
try {
responseConsumer();
} catch (MQClientException | InterruptedException e) {
e.printStackTrace();
}
}).start();
requestProeucer();
}
public static void requestProeucer() throws MQClientException {
long ttl = 10000;
DefaultMQProducer producer = new DefaultMQProducer(PRODUCER_GROUP_NAME);
producer.setNamesrvAddr(NAMESRV_ADDR);
producer.start();
try {
Message msg = new Message(TOPIC, "这个是request消息, 快点回复我".getBytes(RemotingHelper.DEFAULT_CHARSET));
long begin = System.currentTimeMillis();
Message retMsg = producer.request(msg, ttl);
long cost = System.currentTimeMillis() - begin;
System.out.printf("\n发送消息到回复花费: %d ms, 回复内容: %s %n", cost, new String(retMsg.getBody()));
} catch (Exception e) {
e.printStackTrace();
}
producer.shutdown();
}
public static void responseConsumer() throws MQClientException, InterruptedException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("tiger-consumer-group_05");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
consumer.setNamesrvAddr(NAMESRV_ADDR);
consumer.subscribe(TOPIC, "*");
consumer.setPullTimeDelayMillsWhenException(0L);
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
for (MessageExt msg : msgs) {
try {
System.out.printf("[消费消息]已经收到消息,内容: %s\n\n", new String(msg.getBody()));
String replyTo = MessageUtil.getReplyToClient(msg);
byte[] replyContent = "我收到了la".getBytes();
Message replyMessage = MessageUtil.createReplyMessage(msg, replyContent);
DefaultMQProducer replyProducer = new DefaultMQProducer("tiger_producer_group_reply_01");
replyProducer.setNamesrvAddr(NAMESRV_ADDR);
replyProducer.start();
SendResult replyResult = replyProducer.send(replyMessage, 10000);
System.out.printf("reply to %s , %s %n", replyTo, replyResult.toString());
replyProducer.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
Thread.sleep(999999);
}
}