簡體   English   中英

WCF 和 MSMQ - 將消息從隊列推送到服務?

[英]WCF and MSMQ - Push messages from Queue to Services?

我只是想知道這是否可行,或者我是否過於復雜。

我有一個需要與在多個工作站上運行的 WCF 服務進行交互的 Web 應用程序(我們稱之為中央應用程序)。 即,用戶將選擇要向其發送消息的工作站,並且 Web 應用程序將需要調用每個工作站。 這些工作站不會一直在線,在最壞的情況下,可能有 600 多個工作站需要一次發送消息。

我正在考慮在中央機器上運行一個單獨的 WCF 服務,該服務將充當 Web 應用程序(中央)和工作站之間的一種“代理”。 然后,Web 應用程序將使用消息列表對該服務進行一次調用,然后該服務將處理該列表並將消息添加到隊列中。

從我到目前為止所讀到的內容來看,工作站需要輪詢這個中央隊列以獲取消息,但這似乎會增加相當多的開銷。 當消息添加到隊列時,是否可以將它們推送到工作站?

我以前從未使用過 MSMQ,而且我對 WCF 也很陌生,所以如果有更簡單的方法來實現這一點,請告訴我。

我正在考慮在中央機器上運行一個單獨的 WCF 服務,它將充當 Web 應用程序(中央)和工作站之間的一種“代理”

我認為您使用附加服務充當“代理”沒有任何問題。

工作站將需要輪詢此中央隊列以獲取消息

我可能會建議您在中央服務器上有一個中央“收件箱”要處理的消息。 “代理”然后在本地處理收件箱。 讓網站將作業發送到代理。

推模型

對於工作站,不是讓它們從服務器讀取,而是讓服務器將消息發送到工作站。 對每個工作站的唯一隊列和隊列位於工作站本身 讓服務將針對工作站的消息發送到工作站的隊列。 當來自中央隊列/收件箱的每條消息都由代理處理時,代理從隊列中刪除所述消息並移至下一條。

MSMQ 性能

通常在 MSMQ 中,出於擴展的原因,最好進行網絡寫入而不是網絡讀取。 大量計算機都從同一個隊列中讀取數據對性能有害。 換句話說,讓“中央”服務寫入遠程隊列(當機器可用時,MSMQ 將負責傳輸消息)。

工作站需要輪詢這個中央隊列以獲取消息,但這似乎會增加很多開銷

正確的。 使用BeginRead 輪詢對 CPU 有害和/或浪費好線程。

暫無
暫無

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

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