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