【开发篇】二十、SpringBoot整合RocketMQ

文章目录

1、整合

首先导入起步依赖,RocketMQ的starter不是Spring维护的,这一点从starter的命名可以看出来(不是spring-boot-starter-xxx,而是xxx-spring-boot-starter,和MyBatisPlus、Druid一样),因此version值得自己加:

xml 复制代码
<dependency>   
	<groupId>org.apache.rocketmq</groupId>    
	<artifactId>rocketmq-spring-boot-starter</artifactId> 
	<version>2.2.1</version>
</dependency>

添加相关配置:

yaml 复制代码
rocketmq:  
  name-server: localhost:9876  
  producer:    
    group: group_rocketmq  # 设置一个自定义的生产者默认组名,省掉这个启动会报错

在需要的地方注入RocketMQTemplate操作对象:

java 复制代码
@Autowired    
private RocketMQTemplate rocketMQTemplate;

2、消息的生产

发送消息继续convertAndSend方法,接着上篇在Service层来演示:

java 复制代码
@Service
@Slf4j
public class MessageServiceRocketmqImpl implements MessageService {    

	@Autowired    
	private RocketMQTemplate rocketMQTemplate;    

	@Override    
	public void sendMessage(String id) {        
		
		rocketMQTemplate.convertAndSend("order_sm_id",id);      
		
		log.info("使用Rabbitmq将待发送短信的订单纳入处理队列,id:"+id);    
	}
}

convertAndSend方法依旧重载,可以直接传一个Object,也可以先传一个destination参数,即发到哪儿,再传要发的message

3、消费

这里不演示手动receive方法拿消息,直接用监听器自动拿来消费:实现RocketMQListener接口,泛型为Message类型,重写onMessage方法,加@RocketMQMessageListener注解,两个属性为主题名称和消费者组

java 复制代码
@Component
@Slf4j
@RocketMQMessageListener(topic="order_sm_id",consumerGroup = "group_rocketmq")
public class RocketmqMessageListener implements RocketMQListener<String> {  
  
	@Override    
	public void onMessage(String id) {        
		log.info("已完成短信发送业务,id:"+id);    
	}
}

4、发送异步消息

java 复制代码
@Service
@Slf4j
public class MessageServiceRocketmqImpl implements MessageService {   

	@Autowired    
	private RocketMQTemplate rocketMQTemplate;    

	@Override   
	public void sendMessage(String id) {        
		
		//回调逻辑
		SendCallback callback = new SendCallback() {            
			@Override            
			public void onSuccess(SendResult sendResult) {                
				//消息发送成功后你要做的业务
				//...
				log.info("消息发送成功");            
			}     
			       
			@Override            
			public void onException(Throwable throwable) {               
				log.info("消息发送失败!!!!!!!!!!!");            
			}        
		};     
				
		//异步发送
		rocketMQTemplate.asyncSend("order_sm_id",id,callback);  
		log.info("使用Rabbitmq将待发送短信的订单纳入处理队列,id:"+id);      
	}
}

asyncSend异步发消息,有个参数是callback回调方法,类型是一个接口,创建这个对象的时候重写onSuccess和OnException方法,即消息发送成功以后的逻辑和消息发送失败以后的逻辑(异步的体现,不用等,来个回调)。

5、补充:安装RocketMQ

建议以Docker方式启动,下面备份下在Windows的安装(安装为一个系统服务):

  • 下载
java 复制代码
下载地址:https://rocketmq.apache.org/
  • 安装:解压缩即可
java 复制代码
默认服务端口:9876
  • 环境变量配置
java 复制代码
ROCKETMQ_HOME
PATH
NAMESRV_ADDR (建议): 127.0.0.1:9876
  • 启动命名服务器:
java 复制代码
mqnamesrv
  • 启动Broker
java 复制代码
mqbroker
  • 服务器功能测试:生产数据
java 复制代码
tools org.apache.rocketmq.example.quickstart.Producer
  • 服务器功能测试:消费数据
java 复制代码
tools org.apache.rocketmq.example.quickstart.Consumer
相关推荐
晴空๓4 分钟前
Spring Boot项目如何使用MyBatis实现分页查询
spring boot·后端·mybatis
customer088 小时前
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
计算机-秋大田10 小时前
基于微信小程序的电子竞技信息交流平台设计与实现(LW+源码+讲解)
spring boot·后端·微信小程序·小程序·课程设计
customer0814 小时前
【开源免费】基于SpringBoot+Vue.JS景区民宿预约系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
精通HelloWorld!18 小时前
使用HttpClient和HttpRequest发送HTTP请求
java·spring boot·网络协议·spring·http
拾忆,想起19 小时前
如何选择Spring AOP的动态代理?JDK与CGLIB的适用场景
spring boot·后端·spring·spring cloud·微服务
customer0821 小时前
【开源免费】基于SpringBoot+Vue.JS美食推荐商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
一 乐1 天前
基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·微信小程序·酒店管理系统
小万编程1 天前
【2025最新计算机毕业设计】基于SpringBoot+Vue家政呵护到家护理服务平台(高质量源码,可定制,提供文档,免费部署到本地)
java·vue.js·spring boot·计算机毕业设计·java毕业设计·web毕业设计
XYu123011 天前
Spring Boot 热部署实现指南
java·ide·spring boot·intellij-idea