一臺win7web
一臺centos7apache
基礎環境備註能夠參看前面的文章centos
修改配置文件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上同樣的內容
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
啓動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。 **
務必保證先啓動消費者進行Topic訂閱,而後在啓動生產者進行生產(不然極有可能致使消息的重複消費,重複消費,重複消費!重要的事情說三遍!關於消息的重複問題後續給你們介紹~)。並且在實際開發中,有時候不會批量的處理消息,而是原子性的,單線程的去一條一條的處理消息,這樣就是實時的在處理消息。(批量的處理海量的消息,能夠考慮Kafka)
消息失敗,無非涉及到2端:從生產者端發往MQ的失敗;消費者端從MQ消費消息的失敗;
生產消息 發送失敗重試
消費者消費消息重試
在啓動broker的過程當中,能夠觀察下日誌,你會發現RECONSUME_LATER的策略。
若是消費失敗,那麼1S後再次消費,若是失敗,那麼5S後,再次消費,......直至2H後若是消費還失敗,那麼該條消息就會終止發送給消費者了!
RocketMQ爲咱們提供了這麼屢次數的失敗重試,可是在實際中也許咱們並不須要這麼多重試,好比重試3次,尚未成功,咱們但願把這條消息存儲起來並採用另外一種方式處理,並且但願RocketMQ不要在重試呢,由於重試解決不了問題了!
注意到reconsumeTimes屬性,這個屬性就表明消息重試的次數!
注意了,對於消費消息而言,存在2種指定的狀態(成功 OR 失敗重試),若是一條消息在消費端處理沒有返回這2個狀態,那麼至關於這條消息沒有達到消費者,勢必會再次發送給消費者!也便是消息的處理必須有返回值,不然就進行重發。
RocketMQ的消費方式有2種,在默認狀況下,就是集羣消費。另外一種消費模式,是廣播消費。廣播消費,相似於ActiveMQ中的發佈訂閱模式,消息會發給Consume Group中的每個消費者進行消費。
//消息消費方式 默認集羣消費 還有一種是廣播消費 consumer.setMessageModel(MessageModel.BROADCASTING);//廣播消費
這種模式就是會重複,消費消息
同一臺機器,一個消費者羣組,2個消費者
一個生產者