要使InMemoryTransientMessageService在后台线程中运行,需要做些什么?我使用
在服务中发布内容 base.MessageProducer.Publish(new RequestDto());
并且它们会立即在服务请求中被执行。
该项目是自托管的。
这是一个快速单元测试,显示阻止当前请求而不是将其推迟到后台:
答案 0 :(得分:1)
没有开箱即用的东西。你必须建立自己的。看一下ServiceStack.Redis.Messaging.RedisMqHost
- 你需要的大部分内容都是存在的,与ServiceStack.Redis.Messaging.RedisMqServer
(一个用于队列侦听的线程,一个用于队列侦听)相比,它可能更简单(一个线程可以完成所有操作)每个工人)。我建议你参加课程并根据自己的需要进行调整。
一些指示:
ServiceStack.Message.InMemoryMessageQueueClient
未实现WaitForNotifyOnAny()
,因此您需要另一种方法让后台线程等待传入的消息。WorkerStatus.StopCommand
,这意味着您必须找到另一种方法来停止后台线程。ServiceStack.Redis.Messaging.RedisMessageProducer
,因为其Publish()
方法将请求的消息推送到队列,并将通道/队列名称推送到TopicIn队列。阅读完代码后,您可以看到三点如何结合在一起。希望这会有所帮助......