4

需要做什么才能让 InMemoryTransientMessageService 在后台线程中运行?我使用在服务中发布内容

   base.MessageProducer.Publish(new RequestDto());

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

该项目是自托管的。

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

4

1 回答 1

1

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

几点建议:

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

希望这可以帮助...

于 2013-06-16T05:50:28.273 回答