2013-02-19 52 views

回答

1

看看Messaging support in ServiceStack。有Redis和內存MQ主機,可以讓您推遲傳入請求的執行。

一旦您註冊了IMessageFactory所有對/async單向終點的呼叫都是immediately deferred to your registered MQ Broker

SMessage演示項目顯示manually creating and publishing request dtos的示例,並在同一服務中同步執行它們。

一旦你希望你的MQ代理辦理登記的所有信息,如消息處理程序:

mqService.RegisterHandler<PostStatusTwitter>(ServiceController.ExecuteMessage, noOfThreads:2); 
mqService.RegisterHandler<CallFacebook>(ServiceController.ExecuteMessage); 
mqService.RegisterHandler<EmailMessage>(ServiceController.ExecuteMessage); 

公佈將在MQ Broker隊列自動排隊和任何請求DTO在後臺快速處理因爲他們可以使用您指定的背景線程數量。

注意:延遲的請求不再位於HTTP上下文中,因此您無法訪問像自定義HTTP頭等HTTP參數。

+1

劑量,這意味着沒有辦法做到這一點沒有mq?有沒有辦法鉤住HttpListenerBase中的HttpListener如何被使用? – Dmitry 2013-02-19 07:32:52

+0

[InMemoryTransientMessageService](https://github.com/ServiceStack/ServiceStack/tree/master/src/ServiceStack.Common/Messaging)完全在內存中,因此不需要任何外部MQ代理。 – mythz 2013-02-19 07:49:33

+0

這看起來更有希望,而且我喜歡你可以在需要擴展到實際流程時將它叉起來。你提到你一旦推遲消息就會丟失http上下文,但是我假設http會話保持活動狀態?否則你如何將數據返回給請求者? – Dmitry 2013-02-19 15:59:48