2015-08-28 60 views
1

我剛剛開始使用MSMQ,至今看起來並不複雜。我已經在MSDN上完成了一些文章,並且設法實現了一個生產者,它將消息傳遞到遠程計算機上的專用隊列以及處理這些消息的遠程計算機上的使用者。沒問題。瞭解MSMQ的基本知識

現在,我只想確保我理解MSMQ的基本工作方式(或者我認爲一般情況下的隊列),然後再繼續前進。

首先,是否有指定郵件收件人的概念?換句話說,如果我有兩個消費者輪詢同一個隊列,每個人是否會抓住隊列前面的任何消息並對其進行處理,或者生產者是否可以指定特定消息的目標用戶?我應該在Google或MSDN上查找哪些關鍵字以詳細瞭解此信息?

其次,是否有一個發送消息的概念,由所有消費者處理,而不僅僅是第一個接收消息?舉一個簡單的例子,假設公司的接待員在她的電腦上有一名製片人,她可以通過該製片人通知三明治女士到達的公司的其他人(通過將消息推送到隊列中)。任何感興趣的員工都會在他們的計算機上運行一位用戶,他們會看到該消息,但不會將其刪除,以便其他消費者也可以看到該消息。再次,我該怎麼讀更多關於這個的?

最後,每個實現是否總是由一個或多個生產者和一個或多個消費者組成?如果你只有兩臺需要發送消息的機器呢?你通常設置兩個隊列(A和B),並且在機器1上實現隊列A的生產者和隊列B的消費者,而機器2獲得隊列B的生產者和隊列A的消費者,或者有更好的方式這個?

+0

你的問題很可能是關閉其他郵件系統,這是大概到了如此廣泛的話題。您可能要深入到一些教程或書籍來代替。 – Jeroen

+0

你可能會受益於使用如NServiceBus或MassTransit框架做消息序列化和發佈 - 訂閱其使用MSMQ作爲底層傳輸。 –

回答

1

首先,是否有一個指定 消息的接收者的概念?

不,沒有路由或其他行爲可以提供這個。生產者和消費者完全分離,MSMQ不支持任何種類的有條件消息出隊。

...是否有發送消息的概念,由所有消費者處理,而不僅僅是第一個接收的消息?

同樣,沒有內置的「發佈者」功能。

...每個實施是否總是由一個或多個生產者 和一個或多個消費者組成?

是的,這是正確的。 MSMQ僅支持單向消息傳遞,因此消息交換中涉及的任何消息傳遞終端都需要一個隊列來讀取消息併發送一個隊列。按照慣例,消息交換參與者將發送到遠程隊列並從本地隊列接收。

我想你所問的問題是指示一個排隊平臺應該提供多於單向異步消息的期望,但我不同意。 MSMQ更像是一個傳輸層,而不是一個完全成熟的消息傳遞系統,但它是一個非常基礎的平臺,可以用來構建您所追求的企業功能。

作爲一個例子,WCF提供圍繞MSMQ,其允許雙向通信的request/response wrapper

NServiceBus爲MSMQ帶來了請求/響應和publish/subscribe消息傳遞模式(雖然這是高消息傳遞量/橫向擴展的付費產品)。

如果你要考慮它有更多的建立在這些企業功能(但不使用MSMQ),你可以看看Rabbit,或Azure Service Bus