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三個端口竟然都會開啟服務。