簡體   English   中英

JMS主題與隊列 - 意圖

[英]JMS Topic vs Queue - Intent

我試圖了解使用Queue的用例。

我的理解:隊列意味着一對一。 唯一的用例(如果不罕見,很少)將是:消息僅用於一次消費。

但即使在這些情況下,我也可能想要使用Topic(只是為了將來安全)。 唯一需要特別注意的是使訂閱持久。 或者,在特殊情況下,我會使用橋接/調度機制。

鑒於上述情況,我總是(或在大多數情況下)想要發布主題。 訂閱者可以是持久主題或分派隊列。

請讓我知道我在這里缺少什么,或者我錯過了原來的意圖?

如果您根據實際示例考慮,何時使用隊列的設計要求很簡單:

  • 提交在線訂單(完全一次處理,以避免兩次信用卡收費)
  • 私人點對點聊天(每個消息只有一個接收者)
  • 並行任務分配(在網絡系統中的許多工作人員之間分配任務)

...以及何時使用主題的示例......

  • 新聞廣播給多個用戶; 通知服務,股票代碼等
  • 電子郵件客戶端(獨特的持久訂閱者;當您斷開連接時仍然會收到電子郵件)

你說...

但即使在這些情況下,我也可能想要使用Topic(只是為了將來安全)。 我要做的唯一額外情況是使(每個)訂閱持久。 或者,我特殊情況,我會使用橋接/調度機制。

你過度設計了這個設計。 確實,您可以使用主題和持久訂閱者完成一次處理,但您只能使用一個持久的訂閱者; 當您為該主題啟動另一個訂閱者時,您將獲得對同一消息的重復處理,更不用說,單個持久訂閱者幾乎不是可擴展的解決方案; 它肯定會成為你系統的瓶頸。 使用隊列,您可以在同一隊列的100個節點上部署1000個接收器,並且您仍然可以對單個消息進行一次性處理。

你說...

在上面,我總是(或在大多數情況下)想要發布到一個主題。 訂閱者可以是持久主題或分派隊列。

使用帶有主題訂閱者的調度隊列有點多余。 在使用隊列時,你基本上可以進行異步調度,那么為什么不使用隊列呢?...沒有理由在它前面放置一個主題。

您可能錯過了隊列和主題都可以擁有多個訂閱者。 隊列將消息傳遞給潛在的許多訂戶之一,而主題將消息傳遞給所有訂戶。

如果您確實只有一個訂閱者,那么隊列訂閱者和持久主題訂閱者的行為將類似。 我寧願把這種情景視為“特例”。

JMS中的隊列和主題代表兩種不同的模型 - 點對點和發布/訂閱。 主題將保留消息,直到所有客戶端都收到它們,所有訂閱者都處理它們。 隊列將等待第一個消費者提取消息,並考慮在那時讀取消息。

暫無
暫無

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

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