[英]Asyncio and rabbitmq (asynqp): how to consume from multiple queues concurrently
[英]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 :為避免task1
為ConsumerB堆積,您可以為task1
分配一個生存時間,以便當它們“到期”並將其發送到“死信隊列”時,它實際上指向ConsumerA隊列,因此,當ConsumerB是忙,這些task1
消息將被重定向到另一個隊列。
除此之外,至少在RR標准定義中,您還可以為“ ConsumerA”隊列提供“更多票證”,我不知道如何在RabbitMQ上進行操作,但是可以通過創建更多的ConsumerA之類的隊列來將它們分組到同一隊列中來實現。隊列集群。
方法2
使用主題(底部的檢查鏈接)和優先級也可以是一個不錯的解決方案,但是我沒有在同一練習中對它們進行過測試,我看不出為什么它不起作用,請查看下圖:
在這種情況下,一次交換只需要一個隊列,並且ConsumerA將只消費task1
消息,而ConsumerB將消費這兩個消息,從而為task2
賦予更高的優先級。
主題: https : //www.rabbitmq.com/tutorials/tutorial-five-python.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.