springboot基础(49): 整合RocketMQ

本文介绍了如何在SpringBoot应用中整合RocketMQ以实现消息的异步发送和回调。首先,通过引入RocketMQ的Spring Boot starter依赖并配置相关属性,创建消息发送接口和服务。然后,定义一个RocketMQ监听器处理消息。接着,展示了如何使用`asyncSend`方法进行异步消息发送,并提供发送成功的回调函数。最后,讨论了如何设置发送超时时间,确保消息及时发送到RocketMQ服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

整合RocketMQ,RocketMQ消息异步发送,消息回调。

环境准备

安装和启动RocketMQ,请见:springboot基础(48): RocketMQ的安装

如何整合RocketMQ

  1. 导入依赖,该依赖没有被springboot收录,所以需要指定版本。
<!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter -->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
  1. 编写接口发送消息
@RestController
@RequestMapping("/msg")
public class MessageController {

    @Autowired
    private MessageService messageService;

    @GetMapping("{id}")
    public String sendMessage(@PathVariable  String id){
        messageService.sendMessage(id);
        return "success";

    }

}
public interface MessageService {

    void sendMessage(String id);


    String doMessage();
}
  1. 编写接口实现(用于前台发送)
@Service
public class MessageRocketmqServiceImpl implements MessageService {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;


    @Override
    public void sendMessage(String id) {
        System.out.println("待发送消息加入到队列(rocketmq )id:"+id);
        rocketMQTemplate.convertAndSend("msgid",id);
    }

    @Override
    public String doMessage() {
        return null;
    }
}
  1. 定义监听进行异步消息发送

/**
 * 监听器
 */
@Component
@RocketMQMessageListener(topic = "msgid",consumerGroup = "group_rocketmq")
public class RocketMessageListener implements RocketMQListener<String> {

    @Override
    public void onMessage(String id) {
        System.out.println("完成短信的发送,id :"+id);
    }
}
  1. 配置文件
rocketmq:
  name-server: localhost:9876
  producer:
    group: group_rocketmq #需要指定默认的组名
  1. 启动运行服务器,并测试发送消息
    在这里插入图片描述

在这里插入图片描述

异步发送与回调

上面我们在执行convertAndSend方法时,实际上使用的同步发送,而通常我们发送消息到队列需要使用异步方式。
在这里插入图片描述

如何使用异步消息发送?

直接使用asyncSend异步发送的方式。

  public void sendMessage(String id) {
        System.out.println("待发送消息加入到队列(rocketmq )id:"+id);
//        rocketMQTemplate.convertAndSend("msgid",id);
        rocketMQTemplate.asyncSend("msgid",id,null);
    }

如何消息回调?

asyncSend方法最后一个参数是sendCallback,发送后回调,我们只需要传入一个sendCallback的实现即可。这个回调是指消息发送到RocketMQ服务器的回调,并不表示监听器是否处理这条消息。
在这里插入图片描述

  public void sendMessage(String id) {
        System.out.println("待发送消息加入到队列(rocketmq )id:"+id);
//        rocketMQTemplate.convertAndSend("msgid",id);

        SendCallback sendCallback=new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println("发送成功回调"+sendResult.toString());
            }

            @Override
            public void onException(Throwable throwable) {
                System.out.println("发送异常回调");
            }
        };

        rocketMQTemplate.asyncSend("msgid",id,sendCallback);
    }

再次启动服务器发送消息测试
在这里插入图片描述

如何设置回调时间?

设置发送到RocketMQ服务器的超时时间,单位毫秒。

 rocketMQTemplate.asyncSend("abcd",id,sendCallback,5000);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值