RocketMq部署(三)

環境準備

一臺win7web

一臺centos7apache

基礎環境備註能夠參看前面的文章centos

部署2m-noslave

修改配置文件centos7

win7 上spa

C:\Windows\System32\drivers\etc 修改host文件,添加線程

10.10.10.190 rocketmq-master-2日誌

10.10.10.190 rocketmq-nameserver-2code

10.10.10.108 rocketmq-master-1server

10.10.10.108 rocketmq-nameserver-1進程

centos7

vi /etc/hosts

添加如win7上同樣的內容

啓動環境

win7上

cmd啓動nameserver

F:\rocketmq\bin>mqnamesrv

啓動成功提示

Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release. The Name Server boot success. serializeType=JSON

啓動broker-b

F:\rocketmq\bin>mqbroker -c F:\rocketmq\conf\2m-noslave\broker-b.properties

啓動成功

2018-03-07 11:33:33 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes

2018-03-07 11:33:33 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 1255662 bytes

2018-03-07 11:33:37 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-1:9876 OK

2018-03-07 11:33:37 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-2:9876 OK

2018-03-07 11:34:07 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-1:9876 OK

2018-03-07 11:34:07 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-2:9876 OK

centos7

啓動nameserver

[root@Dralen apache-rocketmq]# nohup sh bin/mqnamesrv &

啓動broker-a

[root@Dralen apache-rocketmq]# sh bin/mqbroker -c /soft/rocketmq-all-4.2.0/distribution/target/apache-rocketmq/conf/2m-noslave/broker-a.properties

啓動日誌

[root@Dralen 2m-noslave]# tail -f ~/logs/rocketmqlogs/broker.log

2018-03-07 11:34:52 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-1:9876 OK

2018-03-07 11:34:52 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-2:9876 OK

2018-03-07 11:35:22 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-1:9876 OK

2018-03-07 11:35:22 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-2:9876 OK

2018-03-07 11:35:49 INFO BrokerControllerScheduledThread1 - dispatch behind commit log 0 bytes

2018-03-07 11:35:49 INFO BrokerControllerScheduledThread1 - Slave fall behind master: 521133 bytes

2018-03-07 11:35:52 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-1:9876 OK

2018-03-07 11:35:52 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-2:9876 OK

2018-03-07 11:36:22 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-1:9876 OK

2018-03-07 11:36:22 INFO BrokerControllerScheduledThread1 - register broker to name server rocketmq-nameserver-2:9876 OK

在多Master模式中,若是某個Master進程掛了,顯然這臺broker將不可用,上面的消息也將沒法消費,要知道開源版本的RocketMQ是沒有提供切換程序,來自動恢復故障的,所以在實際開發中,咱們通常提供一個監聽程序,用於監控Master的狀態。

** 上面的消費者採用的是Push Consumer的方式,那麼監聽的Listener中的消息List究竟是多少條呢?雖然提供了API,如consumer.setConsumeMessageBatchMaxSize(10),實際上即便設置了批量的條數,可是注意了,是最大是10,並不意味着每次batch的都是10,只有在消息有擠壓的狀況下才有可能。並且Push Consumer的最佳實踐方式就是一條條的消費,若是須要batch,可使用Pull Consumer。 **

pull Consumer模式消費

輸入圖片說明

務必保證先啓動消費者進行Topic訂閱,而後在啓動生產者進行生產(不然極有可能致使消息的重複消費,重複消費,重複消費!重要的事情說三遍!關於消息的重複問題後續給你們介紹~)。並且在實際開發中,有時候不會批量的處理消息,而是原子性的,單線程的去一條一條的處理消息,這樣就是實時的在處理消息。(批量的處理海量的消息,能夠考慮Kafka)

初步瞭解消息失敗重試機制

消息失敗,無非涉及到2端:從生產者端發往MQ的失敗;消費者端從MQ消費消息的失敗;

生產消息 發送失敗重試

輸入圖片說明

消費者消費消息重試

輸入圖片說明

輸入圖片說明

在啓動broker的過程當中,能夠觀察下日誌,你會發現RECONSUME_LATER的策略。

若是消費失敗,那麼1S後再次消費,若是失敗,那麼5S後,再次消費,......直至2H後若是消費還失敗,那麼該條消息就會終止發送給消費者了!

RocketMQ爲咱們提供了這麼屢次數的失敗重試,可是在實際中也許咱們並不須要這麼多重試,好比重試3次,尚未成功,咱們但願把這條消息存儲起來並採用另外一種方式處理,並且但願RocketMQ不要在重試呢,由於重試解決不了問題了!

注意到reconsumeTimes屬性,這個屬性就表明消息重試的次數!

輸入圖片說明

注意了,對於消費消息而言,存在2種指定的狀態(成功 OR 失敗重試),若是一條消息在消費端處理沒有返回這2個狀態,那麼至關於這條消息沒有達到消費者,勢必會再次發送給消費者!也便是消息的處理必須有返回值,不然就進行重發。

web管理控制檯

輸入圖片說明

集羣消費 AND 廣播消費

RocketMQ的消費方式有2種,在默認狀況下,就是集羣消費。另外一種消費模式,是廣播消費。廣播消費,相似於ActiveMQ中的發佈訂閱模式,消息會發給Consume Group中的每個消費者進行消費。

//消息消費方式 默認集羣消費 還有一種是廣播消費
    consumer.setMessageModel(MessageModel.BROADCASTING);//廣播消費

這種模式就是會重複,消費消息

同一臺機器,一個消費者羣組,2個消費者 輸入圖片說明

輸入圖片說明

一個生產者

輸入圖片說明

相關文章
相關標籤/搜索