目录
什么是RocketMQ
RocketMQ
是一款开源的分布式消息传递系统,最初由阿里巴巴集团开发并开源。它提供了高可靠、可扩展、高性能的消息发布和订阅服务。RocketMQ
主要用于解决分布式系统中大规模数据的异步通信问题,它支持广泛的消息传递模式,包括点对点的队列模式和发布订阅模式。
主要特点:
分布式架构:RocketMQ
支持分布式部署,能够通过集群来提高系统的可靠性和可扩展性。
高性能:RocketMQ
能够处理高并发的消息传递需求,具备低延迟和高吞吐量的特性。
消息顺序保证:对于同一个队列中的消息,RocketMQ
能够保证消息的顺序性,这在一些特定的应用场景中尤为重要。
消息事务:RocketMQ
支持事务消息,确保消息的可靠传递和本地事务的一致性。
灵活的消息模型:支持点对点和发布订阅两种消息模型,满足不同场景下的消息通信需求。
丰富的监控和管理:RocketMQ
提供了全面的监控和管理功能,帮助用户实时跟踪消息的传递状态和系统的健康状况。
水平扩展能力:可以通过增加节点来扩展RocketMQ
的处理能力,适应不断增长的消息负载。
RocketMQ
在Java中的优势和应用场景
应用场景:
-
异步消息传递
-
流量削峰
-
日志收集和分析
-
分布式事务消息
-
广播
特点:由Java实现主要代码库
-
高吞吐量和低延迟
-
可靠性
-
水平扩展能力
-
丰富的特性
-
管理和监控
RocketMQ
集成SpringBoot
1. 添加依赖
在 pom.xml
文件中添加 RocketMQ
Spring Boot Starter 的依赖:
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>?.?.?</version>
</dependency>
2. 配置 RocketMQ
在 application.properties
或 application.yml
中配置 RocketMQ
的连接信息和其他必要属性:
rocketmq:
name-server: *.*.*.*:9999;*.*.*.*:8888
producer:
group: test-group
send-message-timeout: 3000
compress-message-body-threshold: 4096
max-message-size: 4194304
retry-times-when-send-failed: 2
retry-times-when-send-async-failed: 2
retry-next-server: false
# Access Key
# access-key:
# Secret Key
# secret-key:
enable-msg-trace: false
customized-trace-topic: RMQ_SYS_TRACE_TOPIC
workorder-topic: test-topic
workorder-group: test-group
3. 创建生产者
创建一个 RocketMQ
生产者,用于发送消息到指定的主题
@Component
public class MyProducer {
@Autowired
private RocketMQTemplate rocketMQTemplate;
public void sendMessage(String topic, String message) {
rocketMQTemplate.convertAndSend(topic, message);
}
}
4. 创建消费者
创建一个 RocketMQ
消费者,监听指定的主题,并处理接收到的消息
@Component
@RocketMQMessageListener(topic = "my-topic", consumerGroup = "my-consumer-group")
public class MyConsumer implements RocketMQListener<String> {
@Override
public void onMessage(String message) {
System.out.println("Received message: " + message);
// 处理消息的逻辑
}
}
RocketMQ
集成SpringBoot
实现异步消息的传递
1. 编写消息生产者
创建一个消息生产者类,用于发送异步消息。RocketMQ
的消息生产者可以通过注解方式配置
@Service
public class MessageProducer {
@Autowired
private RocketMQTemplate rocketMQTemplate;
public void sendMessageAsync(String topic, String message) {
rocketMQTemplate.asyncSend(topic, message, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.printf("Send async message success. %s %n", sendResult);
}
@Override
public void onException(Throwable throwable) {
System.out.printf("Send async message failed. %s %n", throwable);
}
});
}
}
2. 编写消息消费者
创建一个消息消费者类,用于接收并处理异步消息。消费者可以通过注解方式监听消息
@Service
@RocketMQMessageListener(topic = "your_topic", consumerGroup = "your_consumer_group")
public class MessageConsumer implements RocketMQListener<String> {
@Override
public void onMessage(String message) {
System.out.printf("Received async message: %s %n", message);
// 这里处理接收到的消息逻辑
}
}
3. 发送和接收消息
在Controller中
@RestController
public class MessageController {
@Autowired
private MessageProducer messageProducer;
@GetMapping("/send")
public String sendMessage() {
messageProducer.sendMessageAsync("your_topic", "Hello RocketMQ!");
return "Message sent successfully.";
}
}
通过调用/send
接口来触发消息发送,然后观察消费者是否成功接收和处理了消息。