簡體   English   中英

RabbitMQ和Python 3:如何優先使用來自不同隊列的消息

[英]RabbitMQ and Python 3: How to consume message from different queues with priority

我有兩種任務類型task1和task2。 我也有兩種類型的消費者ConsumerA和ConsumerB。

ConsumerA只能處理任務類型task1的任務。 ConsumerB可以處理兩種類型的任務:task1和task2。

我希望ConsumerA僅處理任務類型task1。

我希望ConsumerB首先處理任務類型task2,並且僅當沒有任務type2時才處理任務類型task1。

如何使用RabbitMQ設計此解決方案。 我考慮使用兩個隊列,但是我不知道如何確保僅當沒有任務type1時才處理任務type2。

我已經閱讀了所有StackOverflow,但沒有任何成功。

也許有人解決了這個任務?

你好@Dima Voronenkov

您可能要檢查RabbitMQ文檔中的“ 優先級隊列”和“ 循環調度”

兩者都可task1每個工作task1創建一個隊列,然后將task1分配到兩個隊列,並以比task1更高的優先級處理task2

如果這種方法符合您的要求,則可以進一步擴展。

RoundRobin方法的圖形描述:

防爆

編輯1 :為避免task1ConsumerB堆積,您可以為task1分配一個生存時間,以便當它們“到期”並將其發送到“死信隊列”時,它實際上指向ConsumerA隊列,因此,當ConsumerB是忙,這些task1消息將被重定向到另一個隊列。

除此之外,至少在RR標准定義中,您還可以為“ ConsumerA”隊列提供“更多票證”,我不知道如何在RabbitMQ上進行操作,但是可以通過創建更多的ConsumerA之類的隊列來將它們分組到同一隊列中來實現。隊列集群。

方法2

使用主題(底部的檢查鏈接)和優先級也可以是一個不錯的解決方案,但是我沒有在同一練習中對它們進行過測試,我看不出為什么它不起作用,請查看下圖:

例2

在這種情況下,一次交換只需要一個隊列,並且ConsumerA將只消費task1消息,而ConsumerB將消費這兩個消息,從而為task2賦予更高的優先級。

主題: https : //www.rabbitmq.com/tutorials/tutorial-five-python.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM