簡體   English   中英

使用amqp從隊列中解復用消息以並行流處理?

[英]Demultiplexing messages from a queue to process in parallel streams using amqp?

我試圖找出是否可以從阻塞場景切換到更具反應性的模式。

我有傳入的更新命令到達隊列,我需要按順序處理它們,但只需要處理相同實體的那些命令。 本質上,我可以創建任意數量的並行更新事件流,只要沒有兩個流包含有關同一實體的事件。

我在想主要隊列的消費者可能能夠利用amqp的路由機制和臨時隊列,為每個實體id創建臨時隊列,並將消費者掛鈎。 一旦訂戶完成並且當前沒有關於所討論的實體的其他事件在隊列中,則可以丟棄該隊列。

這種情況是經常使用的嗎? 有沒有更好的方法來實現這一目標? 在我們當前的系統中,我們使用基於id的命名鎖來防止並發更新。

至少有2個選項:

每個實體的單個隊列和一個Entity-Queue上的n個消費者。

一個隊列,包含所有實體的消息 消息包含數據對於實體的含義。 您可以將其拆分為多個隊列(一種類型的實體的一個AMQP-Queue)或使用BlockingQueue實現。

在qmqp隊列中拆分實體的好處

  • 你可以用rabbitmq創建一個ha-setup
  • 您可以路由郵件
  • 如果某天有必要(可擴展性),你可能有一個以上的實體隊列消費者
  • 消息可以是持久的,因此可以在應用程序崩潰時恢復

使用內部BlockingQueue實現的好處

  • 它更快(顯然沒有net-io)
  • 一切都必須在一個JVM中發生

無論如何,它確實取決於你想要什么,因為這兩種方式都可以帶來好處。

更新:我不確定我現在能不能找到你,但是讓我給你一些資源來嘗試一些事情。 有一些特殊的rabbitmq 擴展可能其中一些可以給你一個想法。 看看交換交換交換綁定。

也為基本測試,我不知道,如果它涵蓋了所有RabbitMQ的功能或根本AMQP的所有功能,但這樣有時是有用的。 請記住,此可視化中的路由鍵是生產者名稱,您還可以找到一些示例。 導入和導出配置。

暫無
暫無

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

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