第一章 RocketMQ安装与简介 v1.0
第一部分 安装
一、使用docker安装
bash
docker pull rocketmqinc/rocketmq
#创建一个数据目录
mkdir -p /docker/rocketmq/nameserver/logs /docker/rocketmq/nameserver/store
#运行
docker run -d --restart=always --name rmqnamesrv --privileged=true -p 9876:9876 -v /docker/rocketmq/nameserver/logs:/root/logs -v /docker/rocketmq/nameserver/store:/root/store -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq sh mqnamesrv
#安装broker
mkdir /opt/docker/rocketmq
vim /opt/docker/rocketmq/broker.conf #文件内容见下面
#启动broker
docker run -d --restart=always --name rmqbroker --link rmqnamesrv:namesrv -p 10911:10911 -p 10909:10909 --privileged=true -v /docker/rocketmq/data/broker/logs:/root/logs -v /docker/rocketmq/data/broker/store:/root/store -v /docker/rocketmq/conf/broker.conf:/opt/docker/rocketmq/broker.conf -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" rocketmqinc/rocketmq sh mqbroker -c /opt/docker/rocketmq/broker.conf
#安装控制台
docker pull pangliang/rocketmq-console-ng
#启动控制台
docker run -d --restart=always --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=<ip>:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 pangliang/rocketmq-console-ng上面的部署包含 NameServer、Broker 和管理控制台三个部分:NameServer 使用 9876 端口,Broker 使用 10911 和 10909 端口,控制台使用 8080 端口。
bash
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
brokerIP1 = 主机的IP第二部分 核心概念
一、RocketMQ简介
RocketMQ是阿里巴巴开源的分布式消息中间件,后来捐赠给Apache基金会成为顶级项目。它具有高可用、高可靠、高吞吐量的特点,广泛应用于订单、交易、充值、流计算、日志流式处理等领域。
二、核心组件
1.NameServer
NameServer是RocketMQ的注册中心,负责管理Broker的路由信息。每个Broker启动时会向所有NameServer注册,Producer和Consumer也会从NameServer获取路由信息。
2.Broker
Broker是消息存储和转发的服务端,负责接收Producer发送的消息并存储,同时将消息投递给Consumer。
3.Producer
Producer是消息的生产者,负责发送消息到Broker。
4.Consumer
Consumer是消息的消费者,负责从Broker拉取或推送消息进行处理。
三、消息模型
1.基本消息(Normal)
普通消息,Producer发送消息到Topic,Consumer订阅Topic进行消费。
2.顺序消息(Ordered)
保证消息按照发送顺序进行消费,分为全局顺序和分区顺序。
- 全局顺序:一个Topic只有一个队列,所有消息按顺序消费
- 分区顺序:相同业务Key的消息按顺序消费
3.延时消息(Delayed)
消息发送后不会立即投递,而是等待指定时间后才投递给Consumer。
4.事务消息(Transactional)
支持分布式事务,保证消息发送和本地事务的一致性。
第三部分 基本使用
一、Spring Boot集成
1.添加依赖
xml
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>2.配置文件
yaml
rocketmq:
name-server: localhost:9876
producer:
group: my-group二、发送消息
1.同步发送
java
@Autowired
private RocketMQTemplate rocketMQTemplate;
public void sendSyncMessage() {
rocketMQTemplate.syncSend("topic-name", "Hello RocketMQ");
}2.异步发送
java
public void sendAsyncMessage() {
rocketMQTemplate.asyncSend("topic-name", "Hello RocketMQ", new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("发送成功");
}
@Override
public void onException(Throwable e) {
System.out.println("发送失败");
}
});
}三、消费消息
java
@Component
@RocketMQMessageListener(topic = "topic-name", consumerGroup = "my-group")
public class MyConsumer implements RocketMQListener<String> {
@Override
public void onMessage(String message) {
System.out.println("收到消息: " + message);
}
}