我們有很多通訊服務器發送數據包。我們希望將這些服務器程序中的這些數據包存儲在MSMQ中,直到更新程序處理它們。數據丟失一直是一個問題,我們希望不會丟失來自這些服務器程序的任何數據包,並希望獲得高效且高性能的解決方案。設計量大MSMQ
什麼是最好的設計方法?
我們有很多通訊服務器發送數據包。我們希望將這些服務器程序中的這些數據包存儲在MSMQ中,直到更新程序處理它們。數據丟失一直是一個問題,我們希望不會丟失來自這些服務器程序的任何數據包,並希望獲得高效且高性能的解決方案。設計量大MSMQ
什麼是最好的設計方法?
我們有很多通信服務器發送數據包。
當存儲'數據包'時,我建議將.NET對象寫入WCF,主要是因爲WCF可以透明地讀/寫MSMQ。這將更容易處理,但如果你的數據包是TCP/IP或二進制包,你需要打開'Ordering',以確保它們按照它們放置的順序進入隊列。
MSMQ也有會話,所以如果你想組合項目這是可能的。 WCF不做這個保證。您需要爲此編寫自定義代碼,但這只是爲特定會話中的每封郵件分配唯一標識的情況。
數據丟失一直關注的,我們想不失去這些服務器程序來的任何數據包
MSMQ可以持續的數據到磁盤上,因此如果一臺服務器出現故障,其隊列被保留。 MSMQ可以將隊列保存在內存中,這樣更有效,但崩潰/重新啓動不會保留隊列信息。
,並希望有一個有效的(良好的性能)
MSMQ是相當高性能的。磁盤的持久性有一個小的開銷,但只是由於磁盤寫入。如果性能包括多線程,則MSMQ不提供此功能,因爲隊列是順序的,所以必須按順序處理。但這是隊列技術的典型特徵。
MSMQ也有4MB最大郵件大小,因此請記住您想要通過網絡發送的內容。
唯一的另一件事是MSMQ不具有大規模可擴展性。其主要目標是保證交付。如果你發送了數據包百萬,他們會到達目的地,但是MSMQ確實具有將消息推送到其他機器的有限能力。它運行一個類似於ThreadPool的系統,因此如果這也是一個需求,它不會擴展。
我還通過寫入數據的基本示例向#msmq-wcf wiki添加了信息。
非常感謝您的設計理念。我想用WCF和MSMQ設置事務隊列和日誌隊列。我們有許多應用程序發送數據包。我的WCF客戶端應該配置爲偵聽來自這些應用程序的數據包的一個端口嗎?這會是一個開銷嗎?我想獲取數據包並將它們寫入隊列。體積再高(每天有數百萬個數據包)什麼是最好的方法?任何示例代碼我可以看看? WCF是否適合這個?謝謝 – user180175 2012-08-10 14:58:21
這裏有一個信息_lot_,只要搜索谷歌'配置wcf msmq'就會產生一堆有用的文章。你如何去做這取決於你的具體情況;我建議儘可能多地閱讀,然後做出決定。你的音量似乎不會成爲問題。假設它們配置正確,WCF和MSMQ具有很高的性能。 – kprobst 2012-08-10 17:15:00
謝謝。我會搜索並找出更多。 – user180175 2012-08-11 11:16:30