ServiceStack:如何使InMemoryTransientMessageService在后台运行

时间:2013-04-09 08:38:44

标签: servicestack message-queue mq

要使InMemoryTransientMessageService在后台线程中运行,需要做些什么?我使用

在服务中发布内容
   base.MessageProducer.Publish(new RequestDto());

并且它们会立即在服务请求中被执行。

该项目是自托管的。

这是一个快速单元测试,显示阻止当前请求而不是将其推迟到后台:

1 个答案:

答案 0 :(得分:1)

没有开箱即用的东西。你必须建立自己的。看一下ServiceStack.Redis.Messaging.RedisMqHost - 你需要的大部分内容都是存在的,与ServiceStack.Redis.Messaging.RedisMqServer(一个用于队列侦听的线程,一个用于队列侦听)相比,它可能更简单(一个线程可以完成所有操作)每个工人)。我建议你参加课程并根据自己的需要进行调整。

一些指示:

  • ServiceStack.Message.InMemoryMessageQueueClient未实现WaitForNotifyOnAny(),因此您需要另一种方法让后台线程等待传入的消息。
  • 密切相关,ServiceStack.Redis实现使用主题订阅,在此类中用于转移WorkerStatus.StopCommand,这意味着您必须找到另一种方法来停止后台线程。
  • 最后,您可能希望调整ServiceStack.Redis.Messaging.RedisMessageProducer,因为其Publish()方法将请求的消息推送到队列,并将通道/队列名称推送到TopicIn队列。阅读完代码后,您可以看到三点如何结合在一起。

希望这会有所帮助......