2011-05-04 97 views
2

我正在考慮在基於一堆WCF服務的產品中添加隊列函數。我讀過一些關於MSMQ的知識,首先我認爲這是我需要的,但我不確定,並且正在考慮將隊列放入數據庫表中。我想知道這裏的somone是否會得到一些反饋意見。在負載平衡環境中的WCF服務之間的MSMQ

基本上,我打算在http上調用外觀WCF服務。立面服務應該只將所有傳入消息寫入隊列,以對呼叫系統作出快速響應。隊列中的消息應該由另一個組件來處理,這些組件可以是WCF服務或Windows服務,具體取決於我選擇的隊列。

該產品運行在負載平衡的環境中,具有2到n個Web服務器。

我在考慮我的選項和問題是:

  1. 要讓門面WCF寫入到MSMQ,然後有anothther WCF服務從隊列中讀取做消息的處理。從我讀到的內容來看,我對這種替代方法並不感到自信,因爲它將如何在負載平衡的環境中工作。

1A。 MSMQ應該放在哪裏?每個Web服務器上有一個?一個在單獨的服務器上?在單獨的服務器上多重? (不考慮冗餘的需要,並且罕見情況下的數據可能丟失並重新發送)

1B。如果我想讓系統冗餘,設計會如何影響?我希望能夠保持MSMQ而不丟失該隊列中的數據,從而失去一臺服務器(它再也不會在線)。從我讀過的有關MSMQ的文章中,我可以看出將MSMQ放置在Windows羣集上的唯一選擇。那是對的嗎? (我想避免使用這個窗口集羣)。

  1. 第二個設計方案是讓外觀WCF服務將隊列寫入數據庫。然後有兩個或多個Windows服務來處理隊列。我對這個選擇沒有任何問題。如果你想知道爲什麼我不選擇這個,因爲它對我來說似乎更簡單,那是因爲我想建立這個不會爲解決方案引入任何Windows服務,我相信MSMQ得到了我不想要的功能代碼我自己,我也很好奇使用MSMQ,因爲我從來沒有使用它。

問候 哈坎

回答

0

容易的選擇閱讀更多一些的subjet我剃鬚刀決定不使用MSMQ後。看來我真的沒有理由走上這條路。我需要這是非事務性的,據我所知,沒有任何日誌或死信技術將幫助我滿足冗餘要求。

大部分時間我的所有組件都會在線(當他們遇到訪問問題時,每年可能會有幾個小時)。

MSQM只會增加令人興奮的解決方案的複雜性,另一種技術以及可能需要跟蹤的另一臺服務器。

爲了獲得完全的冗餘以防止MSMQ中的數據丟失,我需要一個Windows羣集或實現發送/接收到多個相同的隊列。我不想做那些。

所有這一切使我領先我的接收應用程序與WCF門面接受http調用寫入數據庫隊列。這個數據庫已經被保護免於數據丟失。該隊列將被包含所有繁重業務邏輯的Windows Servce的多個活動實例輪詢。由於進程優先級較低,這些服務可以託管在負載平衡Web應用程序使用的已有節點上。如果我有時間使用MSMQ,或者如果我在應用程序中需要另一個原因,我可能會改變我的決定。

2

好了,你不使用WCF與MSMQ集成,您正在使用WCF創建MSMQ消息作爲最終產品。這簡化了「我如何平衡MSMQ?」

你使用的安排是基於什麼最適合你。 您可以讓多個網絡服務器將消息發送到中央計算機上的遠程隊列。 相反,你可以有一個網絡服務器將消息放入本地隊列,中央機器輪詢新來的隊列。

您不需要羣集MSMQ以使其具有彈性。您可以讓代碼具有彈性,以便使用死信隊列,事務隊列,日記等處理丟失的消息。硬件集羣是:-)

+0

您提到了兩個選項,一箇中央隊列或帶有中央接收器的本地隊列。我會閱讀你提供的鏈接,也許他們會提供幫助。我會告訴你。由於我是新來的如何做WCF-MSMQ的事情,我不知道我在想什麼與「與MSMQ集成的WCF」有什麼不同。 – 2011-05-05 07:31:58

+0

「帶有MSMQ集成的WCF」意味着使用MSMQ作爲傳輸協議,而不是HTTP將WCF調用傳遞給服務。 – 2011-05-05 17:38:08

+0

這與「WCF MSQM集成」有何不同之處在於爲我節省了一些編碼嗎? – 2011-05-10 09:36:11