2012-12-12 14 views
1

我正在開發一個系統,其中包括運行工資單,一個重載過程。很快,可能會有這麼多請求在高峯期運行工資單,以致批處理服務器將不堪重負。如何告訴WAS服務輪詢MSMQ以便在忙時等待?

我期待通過使用MSMQ(可能用以後的商業解決方案,如nservicebus替換這個)來解決這個問題。我用這個this example作爲基礎。我可以看到如何設置綁定並將它們粘在一起,但我仍然需要一種方法來告訴WAS託管的訂戶如果不忙,就只處理「運行繁重的工資單流程」消息。否則,隊列中的消息將立即被拾取,並且我們遇到與以前相同的問題。

我可以設置訂閱服務來說「我很忙,我不能接收郵件,將它留在隊列中」嗎?隊列是否需要事務處理?

回答

1

如果您使用的是WCF,那麼無法有條件地激活通道,從而將消息留在隊列中以備後用。

更好的解決方案是將消息接收器託管在完全不同的進程中,例如作爲Windows服務。這些可以根據您的服務窗口要求啓用/禁用。

您還可以非常容易地擴展消息接收器以處理更大的負載(通過託管更多的接收器實例)。要做到這一點

+0

採取項目,並且已經有多個監聽器,這似乎是正確的做事方式,但我也可以選擇向現有的BizTalk服務器添加一些邏輯來動態輪詢隊列。 –

+0

我的觀點是你不需要在WAS/IIS中託管監聽器。這最好是複雜的,並不能給你所需的控制。 Windows服務將更適合您,因爲您可以在繁忙時段關閉它們。 –

0

的方法之一是有2個隊列,您的投票總是先檢查高優先級隊列,只要有在隊列中沒有的項目它爲我使用WCF與其他

+0

我同意拆分隊列是個好主意,但是有什麼辦法可以告訴WCF支持一個隊列而不是另一個? –