<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
有序消息需要生产者,消费者一起配合,生产者要保证每次消息都要投递到broker的同一个队列里,消费者需要设置
关键点 生产这发送 同步消息且指定队列 syncSendOrderly
消费者指定顺序消费 consumeMode = ConsumeMode.ORDERLY
生产者
@Resource
private RocketMQTemplate rocketMQTemplate;
for (int i = 0; i < 10; i++) {
if(i%2 ==0 ){
SendResult a = rocketMQTemplate.syncSendOrderly(
springTopic, "msg"+i,"11");
System.out.println(a.getMessageQueue());
}else {
SendResult a = rocketMQTemplate.syncSendOrderly(
springTopic, "msgaa" + i, "dsadsads");
System.out.println(a.getMessageQueue());
}
}
日志
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=0]
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=3]
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=0]
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=3]
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=0]
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=3]
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=0]
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=3]
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=0]
MessageQueue [topic=string-topic, brokerName=localhost.localdomain, queueId=3]
消费者1
@Service
@RocketMQMessageListener(topic = "${demo.rocketmq.topic}", consumerGroup = "string_consumer",consumeMode = ConsumeMode.ORDERLY)
public class StringConsumer implements RocketMQListener<MessageExt>, RocketMQPushConsumerLifecycleListener {
@Override
public void onMessage(MessageExt messageExt) {
String message = new String(messageExt.getBody());
System.out.println("======="+message);
}
@Override
public void prepareStart(DefaultMQPushConsumer defaultMQPushConsumer) {
defaultMQPushConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_TIMESTAMP);
defaultMQPushConsumer.setConsumeTimestamp(UtilAll.timeMillisToHumanString3(System.currentTimeMillis()));
}
}
消费者2
@Service
@RocketMQMessageListener(topic = "${demo.rocketmq.topic}", consumerGroup = "string_consumer",consumeMode = ConsumeMode.ORDERLY)
public class StringConsumer2 implements RocketMQListener<MessageExt>, RocketMQPushConsumerLifecycleListener {
@Override
public void onMessage(MessageExt messageExt) {
String message = new String(messageExt.getBody());
System.out.println("-----------"+message);
}
@Override
public void prepareStart(DefaultMQPushConsumer defaultMQPushConsumer) {
defaultMQPushConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_TIMESTAMP);
defaultMQPushConsumer.setConsumeTimestamp(UtilAll.timeMillisToHumanString3(System.currentTimeMillis()));
}
}
结果
=======msg0
-----------msgaa1
2019-11-11 10:49:28.167 INFO 1977 --- [MessageThread_8] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D2330E0000 cost: 7 ms
2019-11-11 10:49:28.167 INFO 1977 --- [MessageThread_6] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D2331F0002 cost: 7 ms
-----------msgaa3
=======msg2
2019-11-11 10:49:28.210 INFO 1977 --- [MessageThread_8] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D233270004 cost: 0 ms
=======msg4
2019-11-11 10:49:28.210 INFO 1977 --- [MessageThread_6] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D2332B0006 cost: 0 ms
2019-11-11 10:49:28.212 INFO 1977 --- [MessageThread_8] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D233300009 cost: 0 ms
-----------msgaa5
=======msg6
2019-11-11 10:49:28.214 INFO 1977 --- [MessageThread_6] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D23334000C cost: 0 ms
-----------msgaa7
2019-11-11 10:49:28.216 INFO 1977 --- [MessageThread_6] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D2333E0010 cost: 0 ms
2019-11-11 10:49:28.216 INFO 1977 --- [MessageThread_8] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D2333A000E cost: 0 ms
-----------msgaa9
=======msg8
2019-11-11 10:49:28.217 INFO 1977 --- [MessageThread_8] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D233410012 cost: 0 ms
2019-11-11 10:49:28.217 INFO 1977 --- [MessageThread_6] a.r.s.s.DefaultRocketMQListenerContainer : consume C0A8016109CA18B4AAC235D233440014 cost: 0 ms