前言
之前用Springboot和Rocketmq进行整合的时候都是通过自己写消费者和生产者实现的,但这种方式相对于其他消息中间件通过简单配置的方式整合来说实在过于繁琐,所以研究了一下通过引入spring-boot-starter-rocketmq
进行整合,虽然github上有实现示例,但这里面存在一些没有指明的问题,所以有必要记录一下。
代码实现
根据github上的官方说明,首先在pom文件中添加引用
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>spring-boot-starter-rocketmq</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
这里出现了第一个坑点
问题一
maven无法找到spring-boot-starter-rocketmq
的包,查看了github上的Issue,在Issue #93找到了答案
这个包压根儿就没有被传到maven库,至于原因就不清楚了,既然没有那就只能本地打包上传私服了,比如我们公司用的是nexus,那就传到nexus上。
从github上下载
rocketmq-externals
项目,然后只需要导入其中的子工程spring-boot-starter-rocketmq
即可,然后通过maven的打包命令获取到jar包spring-boot-starter-rocketmq-1.0.0-SNAPSHOT.jar
,并上传至nexus,上传过程在此不详述。
接着实现生产者
@Service
public class NewRocketmqProvider {
@Resource
private RocketMQTemplate rocketMQTemplate;
public boolean send(String topic, String msg){
rocketMQTemplate.convertAndSend(topic, msg);
return true;
}
}
实现消费者
@Service
@RocketMQMessageListener(topic = "rockettest", consumerGroup = "myconsumer")
public class NewRocketmqConsumer implements RocketMQListener<String>{
public void onMessage(String message) {
System.out.println("收到消息:" + message);
}
}
最后是application.properties配置
#Rocketmq配置
spring.rocketmq.name-server=127.0.0.1:9876
spring.rocketmq.producer.group=producer
问题二
当我启动项目时报了如下错误
***************************
APPLICATION FAILED TO START
***************************
Description:
A component required a bean of type 'org.apache.rocketmq.spring.starter.core.RocketMQTemplate' that could not be found.
- Bean method 'rocketMQTemplate' in 'RocketMQAutoConfiguration' not loaded because @ConditionalOnBean (types: org.apache.rocketmq.client.producer.DefaultMQProducer; SearchStrategy: all) did not find any beans of type org.apache.rocketmq.client.producer.DefaultMQProducer
Action:
Consider revisiting the conditions above or defining a bean of type 'org.apache.rocketmq.spring.starter.core.RocketMQTemplate' in your configuration.
查了许多资料,最后同样是在github的Issue中找到了答案,参考Issue #77
当Springboot版本为2.X时需要修改配置文件中配置项spring.rocketmq.name-server
为spring.rocketmq.nameServer
,否则无法识别,而1.X版本则不存在此问题。
总结
本文给出了一个较为简洁的Springboot和Rocketmq整合的方式,同时列出了整合过程中遇到的问题,最终实现了整合。
网友评论