Spring Boot整合RocketMQ

在本小节中,我们将讨论在Spring Boot中整合RocketMQ。

我们选用官方推荐的Spring Boot拓展rocketmq-spring-boot-starter

依赖接入

首先,需要在Spring Boot中添加依赖:

  1. compile 'com.qianmi:spring-boot-starter-rocketmq:1.1.0-RELEASE'

配置RocketMQ的服务器

在配置中,我们需要设定RocketMQ的服务器集群

  1. spring.rocketmq:
  2. nameServer: 127.0.0.1:9876
  3. producer.group: lmsia-abc

如上所示:

  • spring.rocketmq.nameServer 配置元服务器的地址
  • spring.rocketmq.producer.group 是Producer Group。我们这里设定为微服务的名字,即相同的微服务都认为是同一个Producer Group。

在Spring Boot中首发消息

按照上述进行配置后,自动配置会被激活,并自动注入RocketMQTemplate用于生成发消息、ListenerContainer用于收消息。

上述对使用方都是透明的,在Spring Boot中收发消息非常简单,如下:

  1. @Service
  2. @RocketMQMessageListener(topic = TOCPIC, consumerGroup = LmsiaAbcConstant.PROJECT_NAME)
  3. public class MyEventHandlerImpl implements MyEventHandler, RocketMQListener<MyEvent> {
  4. private Logger LOG = LoggerFactory.getLogger(getClass());
  5. @Resource
  6. private RocketMQTemplate rocketMQTemplate;
  7. @Override
  8. public void send(MyEvent event) {
  9. rocketMQTemplate.convertAndSend(TOCPIC, event);
  10. }
  11. @Override
  12. public void onMessage(MyEvent message) {
  13. LOG.info("receive message, data = {}", message.getData());
  14. }
  15. }

如上所述:

  • topic需要配置成一致的,即TOPIC常量,类似的,consumerGroup定义为微服务名称,即认为同一个微服务的所有节点属于同一个组。
  • 我们自动注入了RocketMQTemplate用于发消息,消息默认继承自Serializable
  • RocketMQListener会在收到消息后回调onMessage方法。

如果你使用过RocketMQ的官方客户端的话,会发现其易用性要远低于spring-boot-starter-rocketmq

RocketMQ还支持顺序消息、广播消息等更多功能,spring-boot-starter-rocketmq中都支持了具体的实现,可以直接参考上述项目主页的说明。