1.先搜索rocketmq鏡像:
docker search rocketmq
搜索結果:(我這裏選用了這一個 進行docker安裝使用)
2.啓動NameServer
docker run -d -p 9876:9876 --name rmqserver foxiswho/rocketmq:server-4.5.1
3.啓動broker(Broker容器中默認的配置文件的路徑爲/etc/rocketmq/broker.conf,可以通過-v參數指定本機的配置文件 我這裏就使用默認配置)
docker run -d -p 10911:10911 -p 10909:10909\
--name rmqbroker --link rmqserver:namesrv\
-e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt"\
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m"\
foxiswho/rocketmq:broker-4.5.1
通過-v參數指定本機的配置文件命令參考:
docker run -d -p 10911:10911 -p 10909:10909\
--name rmqbroker --link rmqserver:namesrv\
-e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt"\
-e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m"\
-v /conf/broker.conf:/etc/rocketmq/broker.conf \
foxiswho/rocketmq:broker-4.5.1
4.rocketmq console可視化工具安裝(默認端口爲8080 我這裏指定端口爲8181)
docker run -d --name rmqconsole -p 8181:8080 --link rmqserver:namesrv\
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876\
-Dcom.rocketmq.sendMessageWithVIPChannel=false"\
-t styletang/rocketmq-console-ng
5.查看rocketmq 在docker中啓動情況
docker ps|grep rocketmq
或者
docker ps
我這裏使用docker ps 查看結果如下
6.瀏覽器訪問:http://192.168.2.111:8181 結果如下:
7.集成springboot 2.1.6.RELEASE 發送消息: (由於我這裏使用的是4.5.1 所以starter我需要指定下版本號)
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
可以通過idea插件(插件名稱:maven helper)查看依賴關係 如下:
yml配置文件添加如下配置:
rocketmq:
name-server: 192.168.2.111:9876 #你的ip
producer:
group: blog-group #配置不可少 組名隨便取
8.代碼使用發送消息
@Autowired
private RocketMQTemplate rocketMQTemplate;
// 發消息
rocketMQTemplate.convertAndSend(destination, payload);
問題出現了:發送消息拋出org.apache.rocketmq.remoting.exception.RemotingTooMuchRequestException: sendDefaultImpl call timeout異常
排查原因,出現timeout 首先想到是不是ip不對,或者我的虛擬機 防火牆 沒有關(如果是雲服務器 要去控制檯配置開放端口),於是我關閉了 防火牆 ,重試 還是一樣的錯誤 這時候去查看rockertmq可視化工具 控制檯:
果然 這個ip是docker中分配的ip,需要修改Broker配置文件的IP,廢話不多說 進入容器開始幹 操作如下:
[root@localhost ~]# docker exec -it rmqbroker /bin/bash
[root@0cc30f7b2310 rocketmq-4.5.1]# cd /etc/rocketmq/
[root@0cc30f7b2310 rocketmq]# ll
total 4
-rw-r--r--. 1 root root 974 Jun 1 11:17 broker.conf
[root@0cc30f7b2310 rocketmq]# vim broker.conf
添加如下配置:brokerIP1=192.168.2.111
保存並退出容器,然後重啓:
[root@0cc30f7b2310 rocketmq]# vim broker.conf
[root@0cc30f7b2310 rocketmq]# exit
exit
[root@localhost ~]# docker restart rmqbroker
0cc30f7b2310
重新查看ip:
重試 併發消息:
9.收消息(我這裏由於是一個小項目 就沒有分那麼細了 服務端 客戶端 都在同一個工程 所以 配置文件無需修改):
添加 @RocketMQMessageListener(topic = ConfigConstant.BLOG_MQ_BONUS,consumerGroup = "consumer-group")
其中 topic = ”你的destination“ 一定要與第8步中的destination相一致 否則收不到消息
consumerGroup = "consumer-group" 隨便填
MessageMQ爲第8步中payload 即業務的消息體
@Slf4j
@Service
@RocketMQMessageListener(topic = "你的destination",consumerGroup = "consumer-group")
public class BlogMQListener implements RocketMQListener<MessageMQ> {
/**
* @param message 業務的payload
*/
@Override
public void onMessage(MessageMQ message) {
//當受到消息時候執行業務邏輯
log.info("mq 收到一條消息: {}", JSON.toJSONString(message));
..............................
}
}
}
啓動項目 並查看日誌(第8步中發送了一條消息)
完成 收工!