RabbitMQ 三 工作佇列之輪詢分發

2022-06-06 20:03:08 字數 1081 閱讀 8293

所以我們需要多個消費者一起消費佇列中的訊息,模型如下:(為了方便講解,暫時隱藏掉"交換機")

;//開啟消費者監聽

channel.basicconsume(queuename, true, "", false, false, null, consumer);}}

只有一點點區別:

console.writeline("consumer2 receive : " + str);

thread.sleep(1000);//休息1秒

我們這裡故意讓兩個消費者處理訊息的耗時不一樣,乙個0.5秒,乙個1秒.

我們來看看結果:

可以非常清楚的看到,儘管兩個消費者處理訊息的"耗時"不一樣,但是處理的"數量"是一樣的.

這裡有幾個細節要說明一下:

1.在生產者和兩個消費者中都宣告了同乙個佇列.其實,如果這個佇列之前已經存在了,那麼生產者和消費者都可以不用再宣告了;

2.一定要先啟動兩個消費者,再啟動生產者.原因是,我們上面的**中,消費者的 basicconsume 方法的第2個引數傳入的是 true,

這個引數就是 autoack :是否自動確認(上面文章有講過).

所以如果先開啟生產者,那麼會瞬間傳送完50條訊息,這時候啟動消費者1,那麼會立刻"消費"掉這50條訊息.有朋友肯定要問,不是"睡"了0.5秒麼?

這裡"睡"0.5秒,是對訊息的業務邏輯處理耗時,而不是"消費"訊息,訊息已經在消費者啟動的那一刻從佇列中"拿"過來了;

同時,由於採用的是"自動確認",所以佇列看到50條都被"確認"了,就會將這些訊息從佇列中移除.

這時候再啟動消費者2,則不會收到任何訊息.

rabbitMQ工作佇列

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

RabbitMQ 工作佇列

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

RabbitMQ工作佇列

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