[英]Demultiplexing messages from a queue to process in parallel streams using amqp?
我試圖找出是否可以從阻塞場景切換到更具反應性的模式。
我有傳入的更新命令到達隊列,我需要按順序處理它們,但只需要處理相同實體的那些命令。 本質上,我可以創建任意數量的並行更新事件流,只要沒有兩個流包含有關同一實體的事件。
我在想主要隊列的消費者可能能夠利用amqp的路由機制和臨時隊列,為每個實體id創建臨時隊列,並將消費者掛鈎。 一旦訂戶完成並且當前沒有關於所討論的實體的其他事件在隊列中,則可以丟棄該隊列。
這種情況是經常使用的嗎? 有沒有更好的方法來實現這一目標? 在我們當前的系統中,我們使用基於id的命名鎖來防止並發更新。
至少有2個選項:
每個實體的單個隊列和一個Entity-Queue上的n個消費者。
一個隊列,包含所有實體的消息 。 消息包含數據對於實體的含義。 您可以將其拆分為多個隊列(一種類型的實體的一個AMQP-Queue)或使用BlockingQueue實現。
在qmqp隊列中拆分實體的好處
使用內部BlockingQueue實現的好處
無論如何,它確實取決於你想要什么,因為這兩種方式都可以帶來好處。
更新:我不確定我現在能不能找到你,但是讓我給你一些資源來嘗試一些事情。 有一些特殊的rabbitmq 擴展可能其中一些可以給你一個想法。 看看交換和交換交換綁定。
也為基本測試,我不知道,如果它涵蓋了所有RabbitMQ的功能或根本AMQP的所有功能,但這樣有時是有用的。 請記住,此可視化中的路由鍵是生產者名稱,您還可以找到一些示例。 導入和導出配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.