Docker安裝RocketMQ4.5.1+springboot 2.1.6.RELEASE 發(收)消息

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步中發送了一條消息)

完成 收工!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章