RabbitMQ 工作佇列

2021-10-03 08:59:06 字數 1524 閱讀 7519

rabbitmq是訊息**。它接收資訊和**資訊。你可以把他考慮成乙個郵局。當你講郵寄的信放在郵局時,你可以確定郵差先生或者女士會把郵件最終送到你的收件人手中。當然郵局和rabbitmq最大的區別,rabbitmq不接受紙張,它只接收,儲存,**二進位制的資料訊息快。

下面講一些rabbitmq中的術語:

注意:生產者、消費者和**不必都在同一主機上;實際上,在大多數應用程式中,它們並沒有這樣做。應用程式既可以是生成者也可以是消費者。

簡單佇列,就是傳送單個訊息的消費者和接收資訊並將其列印出來的使用者(消費者),不多敘述。

工作佇列主要是避免短時間內執行密集任務,並且必須等待它完成。我們將任務放在訊息佇列中,啟動多個消費者,任務在他們中是共享的。

設計到工作佇列,當然會有不同方式的工作佇列

ack關於ack這邊多講一點,message acknowledgment是訊息確認,設定autoack=true之後,consumer返回乙個ack(nowledgement),告訴rabbitmq已經接受資訊,處理了特定的訊息,rabbitmq可以自由地刪除它。

輪詢佇列(round-robin dispatching)

autoack設定為true,預設情況下,rabbitmq會傳送每條資訊給另乙個消費者。每個消費者都會獲取相同數量的。並且是間隔形式的。如有c1,c2消費者,10條訊息,c1是0,2,4,6,8,c2是1,3,5,7,9。當然,在我打斷點時,發現對應的資料會都一次性傳送到c1,和c2,c1和c2處理資訊時,並不影響彼此。

公平佇列

rabbitmq分發資訊的時候,可能會發現,乙個consumer很忙,另乙個一點也不忙。因為rabbitmq對此一無所知,只是將第n條資訊,傳送給第nconsumer.

為了解決這個,我們將basicqos方法和prefetechcount=1設定一起用。換句話說,在處理並確認上一條資訊之前,不要將新資訊傳送給工人。

int prefetchcount =1;

channel.

basicqos

(prefetchcount)

;

並且,我們需要將autoack設為false和處理完一條訊息後傳送ack給rabbitmq

defaultconsumer defaultconsumer =

newdefaultconsumer

(channel)

catch

(interruptedexception e)

finally}}

;boolean autoack =

false

; channel.

basicconsume

(queue_name,autoack,defaultconsumer)

;

rabbitMQ工作佇列

簡介 傳送耗時的任務給多個工作者,直到任務完成,返回給mq資訊,mq刪除佇列中的訊息。如果沒有收到返回資訊,就斷掉了,mq重新傳送該條資訊 data implode array slice argv,1 if empty data data hello world msg new amqpmessa...

RabbitMQ工作佇列

工作佇列也叫任務佇列,主要思想就是避免立即執行資源密集型任務,必須等待完成,才能繼續下乙個任務,你可以執行多個工人,佇列裡的工作他們可以共同不重複的完成。1 佇列優點之一就是能夠輕鬆平行的工作。如果積壓工作,我們可以增加更多的工人。預設情況下,rabbitmq將按順序將每條訊息傳送給下乙個工作者。平...

RabbitMQ的工作佇列和路由

工作佇列 working queue 工作佇列這個概念與簡單的傳送 接收訊息的區別就是 接收方接收到訊息後,可能需要花費更長的時間來處理訊息,這個過程就叫乙個work task。幾個概念 分配 多個接收端接收同乙個queue時,如何分配?訊息確認 server端如何確定接收方的work已經對訊息進行...