1.概念学习
官方文档:Quick Start - Apache RocketMQ 参考相关链接:RocketMQ入门介绍 - myseries - 博客园 参考学习教程:【叩丁狼教育】RocketMQ从入门到成神_哔哩哔哩_bilibili
2.环境搭建
RocketMQ 下载与安装:
下载:Downloading the Apache RocketMQ Releases - Apache RocketMQ
Win平台安装:
1.下载后解压 2.根据解压路径配置环境变量 3.修改broker配置文件 在conf目录下找到broker.conf文件,并在最后一行添加如下配置
enablePropertyFilter=true namesrvAddr=127.0.0.1:9876#nameServerAddr服务地址
4.依次启动namerserver、broker 启动nameserver
在bin目录下找到mqnamesrv.cmd 双击或者使用cmd运行
启动broker
在bin目录下找到mqbroker.cmd 使用cmd启动mqbroker并指定配置文件的位置 mqbroker.cmd -c ../conf/borker.conf
5.启动管理控制台 控制台需要另外额外下载, 下载路径Release rocketmq-console-1.0.0 · apache/rocketmq-externals · GitHub 下载源码包后使用idea打开并使用mvnen安装一下,打jar包启动或者直接在idea中启动均可
打jar包启动: 修改pom文件中的版本号,打包版本为:1.0.1
<artifactId>rocketmq-console-ng</artifactId> <packaging>jar</packaging> <version>1.0.0</version>
打包后将target目录下的rocketmq-console-ng-1.0.1.jar和application.properties文件复制到想要启动的目录下: 修改application.properties文件中nameserAddr的配置为刚才mqnameserver启动的配置:
server.contextPath= server.port=8080 #spring.application.index=true spring.application.name=rocketmq-console spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true logging.config=classpath:logback.xml #if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876 rocketmq.config.namesrvAddr=127.0.0.1:9876 #if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true rocketmq.config.isVIPChannel= #rocketmq-console's data path:dashboard/monitor rocketmq.config.dataPath=/tmp/rocketmq-console/data #set it false if you don't want use dashboard.default true rocketmq.config.enableDashBoardCollect=true
之后就可以使用 java -jar 命令启动jar包
启动后,在浏览器中输入:http://localhost:8080/#/即可查看页面
启动后打开集群页面如下则说明win平台下RocketMQ启动配置成功:
Linux平台安装:
1.下载:Downloading the Apache RocketMQ Releases - Apache RocketMQ 下载: rocketmq-all-4.4.0-bin-release.zip包 2.传到linux平台 3.解压文件并重名为rocketmq-4.4 没有解压软件的需要安装解压软件:yum install -y unzip zip
unzip rocketmq-all-4.4.0-bin-release.zip mv rocketmq-all-4.4.0-bin-release rocketmq-4.4
4.修改启动参数(rocket默认启动jvm参数较大,不修改不行) 修改bin目录下的runserver.sh和runbroker.sh 修改runserver.sh
vim runserver.sh 将 JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" 修改为: JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
修改runbroker.sh
vim runbroker.sh 将JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g" 修改为: JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m"
5.启动RocketMQ 启动RocketMQ分为两步,一步是启动nameserver,一步是启动broker,必须先启动namesrv才能启动broker 后台启动nameserver
nohup sh rocketmq-4.4/bin/mqnamesrv &
使用netstat -ntulp命令看到如下端口则启动成功:
启动broker ( -n localhost:9876 & 是指定nameserver地址配置)
nohup sh rocketmq-4.4/bin/mqbroker -n localhost:9876 &
使用netstat -ntulp命令看到如下端口则启动成功:
或者使用jps命令看到如下两个:则表明启动成功:
6.使用控制台界面查看: 修改rocketmq-console-ng-1.0.1.jar的配置文件,将rocketmq.config.namesrvAddr指定为lniux地址 启动界面看到如下即表明启动成功:
补充:关闭RocketMQ: 关闭namesrv服务:sh bin/mqshutdown namesrv 关闭broker服务 :sh bin/mqshutdown broker
3.RocketMQ原生API学习
创建两个maven工程,分别是rocketmq-producer工程和rocketmq-consumer工程 在两个工程中分别引入如下依赖:
<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.4.0</version> </dependency>
编写生产者代码:
public class Producer { public static void main(String[] args) throws Exception { //1.创建出来一个生产者对象 DefaultMQProducer defaultMQProducer = new DefaultMQProducer("rocketmq-producer"); //2.绑定namesrv的地址 defaultMQProducer.setNamesrvAddr("192.168.126.128:9876"); //3.启动生产者 defaultMQProducer.start(); //4.创建一个消息对象,把要发送的的消息放在消息对象中 Message message = new Message("hello","你好呀".getBytes()); //5.使用生产着发出消息(默认使用同步方式发送) SendResult sendResult = defaultMQProducer.send(message); System.out.println(sendResult); //6.关闭资源 defaultMQProducer.shutdown(); } }
编写消费者代码:
public class Consumer { public static void main(String[] args) throws Exception { //1.创建出来一个消费者对象 DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("rocketmq-consumer"); //2.绑定namesrv的地址 consumer.setNamesrvAddr("192.168.126.129:9876"); //3.监听要消费的消息的主题 consumer.subscribe("hello","*");//所有tag都消费 //4.写监听的方法,监听消息 consumer.registerMessageListener(new MessageListenerConcurrently() { //如果监听到指定的topic就会执行consumeMessage方法 @Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) { //消息就存在list里面 for (MessageExt messageExt : list) { System.out.println("消息的内容为:"+new String(messageExt.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); //5.启动消费者 consumer.start(); } }