作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者
系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
如果感觉博主的文章还不错的话,请三连支持一下博主哦
博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人
目录
RocketMQ安装与配置
RocketMQ管理命令
RocketMQ整合springboot
RocketMQ架构
环境搭建与测试
RocketMQ最新版本:5.0
下载地址:https://rocketmq.apache.org/zh/release-notes/
1、普通安装
修改环境变量
export JAVA_HOME=/usr/local/jdk-11.0.11/
export PATH=$PATH:$JAVA_HOME/bin
export ROCKETMQ_HOME=/usr/local/rocketmq-5.0.0
export PATH=$PATH:$ROCKETMQ_HOME/bin
解压文件
unzip rocketmq-all-5.0.0-bin-release.zip
启动NameServer
nohup sh mqnamesrv &
启动broker
nohup sh mqbroker -n localhost:9876
mqadmin help 命令名称
1、启动namesrv和broker
./mqnamesrv #启动nameserver
./mqbroker -n localhost:9876 -c
/opt/alibaba-rocketmq/conf/broker.conf #启动broker
2、查看日志
tail -f ~/logs/rocketmqlogs/namesrv.log #查看日志
tail -f ~/logs/rocketmqlogs/broker.log #查看日志
3、新增topic
mqadmin updateTopic -n localhost:9876 -c
DefaultCluster -t topicWarning
4、查看某个topic的状态
mqadmin topicStatus -n localhost:9876 -t
topicWarning
5、查看所有消费组group
mqadmin consumerProgress -n localhost:9876
6、查看所有topic
mqadmin topicList -n localhost:9876
7、删除topic
mqadmin deleteTopic -n localhost:9876 -c
DefaultCluster -t topicWarning
8、关闭namesrv和broker服务
mqshutdown namesrv
mqshutdown broker
创建springboot-rocketmq-producer工程
1、在pom.xml文件中添加依赖
org.apache.rocketmq
rocketmq-spring-boot-starter
${rocketmq-spring-boot-starter-version}
org.projectlombok
lombok
1.18.6
org.springframework.boot
spring-boot-starter-test
test
2、配置文件
# application.properties
spring.application.name=springboot_rocketmq_producer
# nameserver的地址
rocketmq.name-server=192.168.139.128:9876
#指定生产组名称
rocketmq.producer.group=my-group
3、测试类
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyRocketProducerApplication.class})
public class MyRocketProducerApplicationTest
{
@Autowired
private RocketMQTemplate rocketMQTemplate;
@Test
public void testSendMessage() {
// 用于向broker发送消息
// 第一个参数是topic名称
// 第二个参数是消息内容
this.rocketMQTemplate.convertAndSend(
"topic_springboot_01",
"springboot: hello rocketmq..."
);
}
}
创建springboot-rocketmq-consumer工程
pom.xml文件同producer工程
application.properties配置
spring.application.name=springboot-rocketmq-consumer
rocketmq.name-server=192.168.139.128:9876
启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootRocketmqConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootRocketmqConsumerApplication.class, args);
}
}
消息监听器
@Slf4j
@Component
@RocketMQMessageListener(topic="topic_springboot_01",consumerGroup="springboot-rocketmq-consumer-01")
public class Consumer implements RocketMQlistener{
@override
public void onMessage(String message){
log.info("Received messsge:" + message);
}
}
启动consumer工程,观察控制台窗口打印内容
springboot: hello rocketmq...
技术架构
实时效果反馈
1.Broker承担的工作不包括哪个?
A 接收生产者发来的消息
B 存储消息
C 为其它Broker提供路由信息
D 处理来自消费方的请求
2.NameServer承担的工作不包括哪个?
A 定时与broker通信,保存活跃状态的broker列表
B 负责存储转发消息
C 维护所有broker中的topic列表
D 为生产者、消费者提供最新的路由信息
部署架构
结合部署架构图,集群工作流程可作如下描述:
1、启动NameServer,通过监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心。
2、Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息。注册成功后,NameServer集群中就有Topic 跟Broker的映射关系。
3、收发消息前,先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,也可以在发送消息时自动创建Topic。
4、Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,包含Topic中所有队列列表然后选择 一个队列,与队列所在的Broker建立长连接再向Broker发消息。
5、Consumer跟Producer类似,跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,开始消费消息。
实时效果反馈
1.消息的订阅规则由谁制定?
A 消息的生产者
B 消息的消费者
C NameServer
D broker