簡體   English   中英

ActiveMQ-創建隊列/目的地的最佳實踐

[英]ActiveMQ - Best practice for creating queues/destinations

在ActiveMQ中,是否應該為每種不同類型的事件創建單獨的隊列(目的地),以便我們可以讓不同的使用者處理此類事件?

還是我們應該發布一個通用事件,然后在使用者中檢查該事件以找出其類型並采取適當的措施。

例如:如果有兩個事件UserCreatedEventUserActivatedEvent ,我們應該有一個隊列user_events_q ,還是應該有兩個隊列user_created_events_quser_activated_events_q

有更多的隊列有什么不利之處嗎? 需要更多資源嗎? 在這種情況下的典型做法是什么?

絕對有多個隊列將使用額外的資源,例如將對象放入隊列然后保留在內存中(如果未使用持久隊列),並且代理程序需要為每個隊列維護一些元數據,但這是可以承受的開銷因為擁有針對每個事件的專用隊列(針對您的情況)提供了極大的靈活性和可擴展性。 對於一個實例,將引入一個新事件,然后您可以簡單地引入一個新使用者以從該隊列中讀取,而不必考慮現有的實現。

您可能希望對隊列數量進行一些限制。 也許將其保持在100以下。 如果使用Hawt.io或Web控制台之類的工具-大量隊列將無法很好地工作。 盡管從理論上講您可以使用大量隊列,但可能需要進行一些調整

單獨的隊列的優點是:

  • 每個隊列專用的死信隊列
  • 授權是“按隊列”。
  • 可以在隊列級別上應用策略-即最大內存,DLQ策略等。
  • 更簡單的客戶端代碼。

您可以使用選擇器在共享隊列上復用事件類型。 某些客戶端將僅通過查看某些消息屬性來接收其所需的消息。 EventType = 'StockUpdate' 這可能是減少隊列數量的一種方法。

另一種方法是改為使用主題層次結構。 它不能完全映射到隊列,但可以選擇。 假設您發布到不同的主題: StockUpdates.Nasdaq.AAPLStockUpdates.DeutscheBorse.VOW3

因此,如果您只想訂閱納斯達克,請使用StockUpdates.Nasdaq.>或者如果您只想訂閱大眾汽車的股票更新,請使用StockUpdates.DeutscheBorse.VOW3

暫無
暫無

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

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