2010-12-19 81 views
0

所有與WCF斷開的消息,建議通過防火牆

我要找的建議在以下情形:

我在將消息發送給應用程序的企業網絡的一部分運行的組件邏輯組件進行處理。這些組件可能駐留在同一臺服務器上,同一網絡中的不同服務器上(LAN或WAN),或者駐留在雲端。應用程序服務器應該具有可伸縮性和彈性。

這些消息是相關的,因爲它們到達的順序很重要。它們用客戶時間戳標記時間。我認爲我會讓客戶端使用WCF basicHttpBinding(有些基於.NET CF只有基本的)來發送消息到應用服務器(這是因爲我們可以保證端口80/443將對外發連接開放)。服務器接受這些,並將它們寫入隊列。如果需要通過多臺機器,該隊列可以擴展。

我對使用MSMQ的隊列猶豫不決,爲了正確擴展,我們將不得不在每個應用程序服務器上安裝單獨的專用隊列,並循環監控隊列。我擔心,儘管我們可能會在服務器恢復之前丟失一個服務器上的消息,並且我們最終可能會處理來自其他服務器的稍後消息並破壞順序。

我更喜歡所有應用程序服務器監視的中央隊列(例如數據庫表)。

考慮到這一點,我想要做的是創建一個自定義WCF綁定,類似於netMsmqBinding,但它使用數據庫表,而我很困惑我是否可以簡單地創建一個自定義傳輸或者我需要一個完整的綁定,以及綁定是否允許客戶端通過HTTP發送。我瀏覽過互聯網,但對於從哪裏開始我有點困惑。

我不能打擾自定義WCF綁定,但它似乎是一個很好的方式來引入可伸縮性,如果我確實需要分離服務器。

任何建議,請有幫助,包括替代品。 非常感謝

+0

10個問題,不接受?不值得回答... – Aliostad 2010-12-19 17:32:22

+0

9個問​​題,實際上只有5個答案,其中只有一對夫婦幫助,但感謝您的評論。我會確保我更新那些我相信幫助過我的回覆。 – GrahamB 2010-12-21 18:55:41

回答

0

我會從MSMQ開始,因爲它正是爲了這個purpouse。在羣集計算機上使用單個事務隊列,並讓應用程序服務器從該隊列獲取消息進行處理。每個消息處理都必須是分佈式事務(MSDTC)的一部分。

此方案將確保:

  • 羣集隊列主機將確保如果一個集羣節點發生故障,其它仍然能夠處理請求

  • 或者發送消息至可收回 - 這意味着,消息將會保留在硬盤上(不僅在內存中),所以在整個羣集的嚴重故障中,您仍然會收到所有消息。

  • 事務性隊列將確保所有消息傳輸操作都是原子性的 - 從傳出隊列到目標隊列的移動消息將作爲事務進行處理。這意味着來自外出隊列的原始消息將保持在隊列中,直到來自目標隊列的消息到達。交易處理可以確保訂單交付。

  • 分佈式事務將允許應用程序服務器在事務中使用消息。消息不會從隊列中刪除,直到應用程序服務器提交事務或事務超時。

  • 也可以在.NET CF上使用MSMQ,因此您可以將消息直接發送到隊列,而無需中間不可靠的Web服務層。

  • 應該可以通過HTTP配置MSMQ(但我從來沒有使用它,所以我不知道它如何與前面提到的功能合作)。

您提出的解決方案將非常困難。您將最終構建BizTalk的MessageBox。但是如果你真的想這樣做,請檢查Omar's post關於構建數據庫隊列表。

+0

感謝您的反饋,尤其是帖子,但我必須考慮這一點。該解決方案當然有彈性,但不具備可擴展性。根據我的理解,只能有一臺服務器處理隊列。 – GrahamB 2010-12-21 18:59:56

+0

不可以有儘可能多的服務器進行處理,但只有一個服務器/集羣託管隊列(隊列不必位於處理服務器上)。但是,如果消息順序非常重要,那麼您永遠不會擁有可擴展的解決方案,因爲您將始終只有單個服務器處理消息。在成功處理當前消息之前,沒有人能夠接收其他消息。否則,處理失敗將破壞序列。 – 2010-12-22 11:51:55

+0

好的謝謝。總是有這樣的印象,私人MSMQ隊列不能/不應該在計算機之間共享,但只是回顧一下,在Win2008中似乎有所改進。它肯定會讓事情變得更容易:) – GrahamB 2010-12-24 13:54:08