RocketMQ 是一款开源的分布式消息系统,还有其他rabbitMq、kafka等其他消息队列组件,官方推荐RocketMQ更符合分布式开发系统。
一、下载RocketMQ
官网地址:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.2/rocketmq-all-4.3.2-bin-release.zip
集群模式教程:https://github.com/apache/rocketmq/blob/master/docs/cn/operation.md
二、启动 NameServer
如果是云服务器,建议使用公网IP,若使用内网IP容易出现问题。
nohup ./mqnamesrv -n 124.xxx.xxx.xxx:9876 &
三、启动 Broker
配置文件./config/broker.conf
...... brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH # 如果云服务,远程调用需要配置,不然会默认内网192.168.x.x brokerIP1=124.xxx.xxx.xxx
调用broker,这里需要使用上面配置的broker.conf(若producer等都是本地,也可以不需要配置)
nohup ./mqbroker -n 124.xxx.xxx.xxx:9876 -c ../conf/broker.conf &
四、配置生产者
打开idea中maven项目导入。
其他基本都不需要改变,主要是application.properties配置文件需要修改。
...... #这个云服务需要公网IP,如果本地则默认localhost:9876 spring.cloud.stream.rocketmq.binder.name-server=124.xxx.xxx.xxx:9876 ......(下面省略)
直接运行RocketMQProduceApplication类中的main方法,消息就会推送。可以看到控制台信息
四、配置消费者
其他基本都不需要改变,主要是application.properties配置文件需要修改。
......
#这个云服务需要公网IP,如果本地则默认localhost:9876
spring.cloud.stream.rocketmq.binder.name-server=124.xxx.xxx.xxx:9876
......(下面省略)
直接运行RocketMQConsumerApplication类中的mian方法,消息就会开始接收。控制台信息
五、RocketMQ控制台
上面基本已经完成RocketMQ基本应用,但是看不到接收、发送等等信息,所以这里就有了RocketMQ控制台,这里也只需要配置一下即可。
官网项目地址:https://github.com/apache/rocketmq-externals
实际上是这里面的子项目rocketmq-console
下载下来之后,也是导入idea中,然后开始配置application.properties
server.address=0.0.0.0 server.port=8111 #这里端口号......(省略) #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=124.xxx.xxx.xxx:9876 #这里就需要注意,Name Server云服务公网ip ......(省略)
配置完之后,直接打成jar,就可以运行。
java -jar rocketmq-console-2.0.0.jar > rocketmq-console.log &
打开浏览器访问http://127.0.0.1:8111就可以看到了,下图的信息。
六、总结
消息队列在微服务中有着不可忽视的作用,它有着异步、削峰(限流)、解耦的特征,在面对突发高峰等情况也能,很好的维持了服务的稳定性。
本来配置到第四步觉得RocketMQ竟然没有控制台,原本令我略微失望。不过在查找材料发现他没有集成在一起,只需要另外配置。
最后注意一点!!!项目放在云服务最好开放端口10909、10911、10912这三个端口,虽然地址是10911端口,但是在运行期间发现10909、10911、10912三个端口竟然都会开启服务。