gpt4 book ai didi

servicestack - 使用 ServiceStack 的 AsyncServiceBase 开火即忘

转载 作者:行者123 更新时间:2023-12-04 07:41:43 24 4
gpt4 key购买 nike

我有以下服务

public class AppService : AsyncServiceBase<EvaluateStock>
{
public IBus Bus { get; set; }

public override object ExecuteAsync(EvaluateStock request)
{
// this will block the incoming http request
// unitl task is completed

// long computation
// Bus.Publish(result)
}
}

被不同的消费者按照以下方式调用
POST
http://srv1/app/json/asynconeway/EvaluateStock

使用 asynconeway 我假设它可以让我像 WCF 使用 IsOneWay 那样实现火灾和遗忘。但似乎并非如此。

我错过了什么吗?

最佳答案

AsyncServiceBase已被弃用为 ExecuteAsync现在在 ServiceBase 中,这是在向 发出请求时调用的内容/asynconeway/XXX 预定义的端点。

而不是覆盖 执行异步 推荐的方法是实现 IMessageFactory如果 IMessageFactory 会被调用已在 AppHost IOC 中注册。如果 IMessageFactory 未注册,则它只是被执行同步 - 此时如果您仍然希望它非阻塞,您将覆盖它。 ExecuteAsync 的实现位于:

// Persists the request into the registered message queue if configured, 
// otherwise calls Execute() to handle the request immediately.
//
// IAsyncService.ExecuteAsync() will be used instead of IService.Execute() for
// EndpointAttributes.AsyncOneWay requests
public virtual object ExecuteAsync(TRequest request)
{
if (MessageFactory == null)
{
return Execute(request);
}

BeforeEachRequest(request);

//Capture and persist this async request on this Services 'In Queue'
//for execution after this request has been completed
using (var producer = MessageFactory.CreateMessageProducer()) {
producer.Publish(request);
}

return ServiceUtils.CreateResponseDto(request);
}

IMessageFactory(客户端)/IMessageService(服务器)是 ServiceStack 的 Messaging API 的一部分,它允许您发布消息以便稍后延迟执行。见 Redis and Messaging wiki有关使用内置 Redis IMessageService 的端到端解决方案的示例。还有 InMemoryRCon IMesssageService 可用,也应该很容易创建自己的。

future 的异步支持

还有一个 async branchIHttpAsyncHandler 上运行 ServiceStack并且已经有一个功能性的 alpha 版本可供您尝试: ServiceStack-v4.00-alpha.zip

通过此更改 ServiceStack 支持 Task<>作为服务的返回类型。您只需要注册 Task<> plugin .要查看完整示例,请查看 this integration test .

关于servicestack - 使用 ServiceStack 的 AsyncServiceBase 开火即忘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com