我需要一種將消息發佈到未知數量的訂戶的方法。這些信息應持久/堅持,並分爲三個優先事項(高,中,低)。其中一個訂戶只能處理有限的負載,而一些消息更重要。高優先級的消息首先處理等。帶有Rebus持久消息的Pub/sub
我該怎麼做與Rebus?我想我需要每個用戶三個隊列?
我在哪裏可以找到具有持久隊列和MSMQ的發佈/訂閱示例?
我需要一種將消息發佈到未知數量的訂戶的方法。這些信息應持久/堅持,並分爲三個優先事項(高,中,低)。其中一個訂戶只能處理有限的負載,而一些消息更重要。高優先級的消息首先處理等。帶有Rebus持久消息的Pub/sub
我該怎麼做與Rebus?我想我需要每個用戶三個隊列?
我在哪裏可以找到具有持久隊列和MSMQ的發佈/訂閱示例?
首先,一些信息:Rebus喜歡使用耐久的隊列,持久的消息傳遞和有保證的交付。事實上,除非你積極做出選擇,否則這就是一切正常的方式。因此,如果您設法使用Rebus進行pub/sub工作,它是耐用的:)
定義發佈與「未知數量的訂戶」一起工作 - 至少這是總線問題,而不是應用程序問題。
在現實中,用戶通過發出SubscriptionMessage
(這可以被看作是一個訂閱請求),這是隨後由發佈者發佈事件的一些數量(這可以被看作是「訂閱回覆」發起的pub/sub談話)。發佈者的「公交部分」跟蹤誰訂閱了任何給定的事件類型。
到目前爲止,這麼好。
關於優先事項,有沒有現成的方式來實現與Rebus。正如你所建議的那樣,確保某些消息類型的最大延遲的一種方法是通過製作單獨的端點,使其輸入隊列不會被低優先級消息阻塞。
但是圍繞Rebus的配置有一些東西,強烈建議每個進程只有一個輸入隊列,這可能意味着您應該創建單獨的進程來訂閱那些高優先級的消息類型。
我知道,MSMQ支持某種形式的郵件優先級的,所以我想這可以具有MsmqMessageQueue
理解某些頭(類似於如何快遞和時間待收到實現支持 - 看here ) - 拉請求被高興地接受和強烈鼓勵:)
我需要爲每個用戶配置一個端點嗎?用戶存儲的消息在哪裏?無法找到示例實現。 我會研究MSMQ消息的優先級。 – Lybecker 2013-03-12 06:12:27
給訂戶的消息存儲在每個訂戶的輸入隊列中。發佈者在發佈時直接向每個單獨訂閱者發送副本(*)。 – mookid8000 2013-03-12 06:25:57
*)通過「直接」,我意味着MSMQ存儲轉發,所以它是完全安全的:) – mookid8000 2013-03-12 06:26:39