一,RocketMq介绍和基本概念
RocketMQ是由阿里巴巴开发并开源的一款分布式消息中间件,旨在提供高可用、高可靠的消息传递服务。它广泛应用于大规模分布式系统中,尤其在电商领域表现卓越,是一款纯Java实现的分布式消息中间件,以其强大的功能和灵活的扩展性,在分布式系统中发挥着重要作用;
1,基本概念与架构
RocketMQ的主要组成部分包括Producer、Consumer、Broker和NameServer:
(1)Producer:负责发送消息的组件。
(2)Consumer:负责接收消息的组件。
(3)Broker:存储和转发消息的组件。
(4)NameServer:维护Broker注册信息的命名服务,提供路由信息给Producer和Consumer
2,功能特性
RocketMQ支持多种类型的消息,包括但不限于:
(1)普通消息:标准消息类型。
(2)事务消息:支持分布式事务,类似X/Open XA协议。
(3)顺序消息:按顺序发送和消费消息。
(4)批量消息:一次性发送多个消息。
(5)定时消息:消息在指定时间后才被消费。
(6)延迟消息:消息在设定的时间后才开始处理。
(7)消息回溯:能够追溯历史消息。
此外,RocketMQ还具备以下高级功能:
(8)死信队列:用于处理无法正常消费的消息。
(9)消息重试机制:确保消息能够成功送达。
(10)刷盘机制:保证数据的持久化存储
3,特点与优势
RocketMQ具有低延迟、高性能、高可靠性、万亿级容量和灵活的可扩展性等特点。其架构设计简洁高效,能够应对高并发场景。
二,RocketMQ的下载和安装
1,RocketMQ的官网下载 https://rocketmq.apache.org/download
2,以Linux虚拟机为例安装,上传服务器某目录并解压:
tar -xzvf rocketmq-5.3.0.tar.gz
或者
unzip rocketmq-5.3.0.zip
3,配置环境变量:
将RocketMQ的bin目录添加到系统的PATH环境变量中,确保可通过命令行启动RocketMQ的各种服务( 注意事先安装好JavaJDK,rocketMQ运行需要JDK)
export ROCKETMQ_HOME=/path/to/rocketmq
export PATH=$PATH:$ROCKETMQ_HOME/bin
或者
export PATH=$PATH:/path/to/rocketmq/bin
4,启动NameServer:
# 假设当前就在rocketmq的bin目录下
nohup sh mqnamesrv &
5,启动Broker:
# 假设当前就在rocketmq的bin目录下
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &
6,集群搭建(可选项)
参考官方提供的三种集群模式:2主2从异步通信方式、同步复制方式等,
根据具体需求调整配置文件,并确保所有节点之间的网络连接正常
三,SpingBoot如何接入rocketMq的例子
Spring Boot接入RocketMQ的基本步骤如下:
1,添加依赖:在pom.xml中添加 RocketMQ 的 Spring Boot Starter 依赖。
<dependencies>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>4.0.0</version>
</dependency>
<!-- 上面是rocketmq的依赖,下面是SpringBoot的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.8</version>
</dependency>
</dependencies>
2,配置RocketMQ:在 application.properties 或 application.yml 中配置RocketMQ的基本信息。
# application.properties
spring.rocketmq.name-server=127.0.0.1:9876
spring.rocketmq.producer.group=my-group
3,生产者,发送消息:使用 @RocketMQMessageSender 注解的Bean发送消息。
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;
@Service
public class MessageService {
@Autowired
private RocketMQTemplate rocketMQTemplate;
public void sendMessage(String topic, String tag, String message) {
rocketMQTemplate.convertAndSend(topic + ":" + tag,
MessageBuilder.withPayload(message).build());
}
}
4,消费者,接收消息:使用 @RocketMQMessageListener 注解的Bean来监听消息。
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
@Component
@RocketMQMessageListener(topic = "my-topic", consumerGroup = "my-consumer_group")
public class ConsumerListener implements RocketMQListener<String> {
@Override
public void onMessage(String message) {
// 处理接收到的消息
System.out.println("Received message: " + message);
}
}
5,简单的SpringBoot应用程序启动类。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
欢迎拍砖讨论...