訊息佇列本來就是一種經典的生產者與消費者模式。生產者向訊息佇列中傳送訊息,消費者從訊息佇列中獲取訊息來消費。
訊息的傳送一般由乙個**來實現的,那就是message broker(即訊息**)。message broker有兩大職責,一是訊息路由,二是資料轉換。這就好比a給b寄信,如果不使用郵局的話,就要自己想辦法送達,費時費力,而通過郵局的話,只要b的位址在郵局中註冊過,那麼天涯海角也能送達。這裡的郵局扮演的角色就像訊息系統中的message broker。
眾所周知,訊息佇列是典型的』send and forget』原則的體現,生產者只管傳送,不管訊息的後續處理。為了最大效率的完成對訊息佇列中的訊息的消費,一般可以同時起多個一模一樣的消費者,以並行的方式來拉取訊息佇列中的訊息。這樣的好處有多個:
1.加快處理訊息佇列中的訊息。
2.增強穩定性,如果乙個消費者出現問題,不會影響對訊息佇列中訊息的處理。
使用spring jms來配置多個listener例項,只需配置messagelistenercontainer就行。
多配置乙個屬性concurrentconsumers,設定值為4,就是同時啟動4個listener例項來消費訊息。
使用messagesender來傳送100條訊息,可以檢查訊息處理的順序會發生變化。
for (int i = 0; i < 100; i++)
執行結果如下:
...
received: message 4
received: message 7
received: message 6
received: message 5
received: message 8
received: message 10
received: message 9
…
除了設定乙個固定的listener數量,也可以設定乙個listener區間,這樣messagelistenercontainer可以根據訊息佇列中的訊息規模自動調整並行數量。
這次使用的是concurrency屬性,4-8表示最小併發數是4,最大併發數為8,當然也可以給乙個固定值,比如5,這樣就相當於concurrentconsumers屬性了。 azkaban設定依賴,並且多個任務並行執行
在azkaban的任務排程中,設定依賴可以完成對任務的排程,指令碼如下 第乙個job 命名為 ods actlog.job config failure.emails xx xx nodes name ods actlog sql job type command config command sh...
多個collection並行查詢
現有solrcloud狀態 4個索引庫分布在4臺機器上,就是乙個collection對應4個shard,每個shard下掛乙個core,沒有副本,總索引量為10000w。增加兩個collection 分別在每台solr的機器上增加同乙個collection,如下圖 增加過兩個collection後的...
ActiveMQ中Session設定的相關理解
名詞解釋 p 生產者 c 消費者 服務端 p 或者 activemq服務 客戶端 activemq服務 或者 c 客戶端成功接收一條訊息的標誌是這條訊息被簽收。成功接收一條訊息一般包括如下三個階段 1 客戶端接收訊息 2 客戶端處理訊息 3 訊息被簽收。在不帶事務的 session 中,一條訊息何時...