Nservicebus 用Bus.SendLocal(IMessage)而不是Bus.Publish(IEEvent)开始一个传奇

Nservicebus 用Bus.SendLocal(IMessage)而不是Bus.Publish(IEEvent)开始一个传奇,nservicebus,Nservicebus,我正在开发一个需要定期轮询第三方API的应用程序。在整个项目中,我们大量使用了NServiceBus,我决定利用一个传奇的好处来帮助保持我的民意调查者的状态 简言之,Saga用于维护确保正确完成轮询所需的信息,同时也为我们提供了在每次轮询后创建超时的简单性,以确保进行下一次轮询,即使服务因任何原因停止/泄露/阻止 我的第一个问题是,当我决定让服务订阅自己的事件,然后在服务开始使用iwanttorunshenbusstartsandstops时发布其中一个事件,从而启动Saga时。问题是服务将启动

我正在开发一个需要定期轮询第三方API的应用程序。在整个项目中,我们大量使用了NServiceBus,我决定利用一个传奇的好处来帮助保持我的民意调查者的状态

简言之,Saga用于维护确保正确完成轮询所需的信息,同时也为我们提供了在每次轮询后创建超时的简单性,以确保进行下一次轮询,即使服务因任何原因停止/泄露/阻止

我的第一个问题是,当我决定让服务订阅自己的事件,然后在服务开始使用iwanttorunshenbusstartsandstops时发布其中一个事件,从而启动Saga时。问题是服务将启动并因此发布事件,但这将在创建订阅之前发生。因此,除非我重新启动该服务,否则该服务将不会处理本打算启动整个事件的事件。重新启动服务以绕过这个问题并不是一个我想考虑的解决方案。 从那时起,通过一些游戏,我发现使用

Bus.sendlocalnewmymessage;MyMessage实现了IMessage

将有效地开始传奇,而无需订阅。Saga是在我使用NHibernate和MSSQL进行持久化的数据库中创建的,超时是正确创建的,功能完全符合预期

这个解决方案的唯一问题是,我正在做一些在NServiceBus文档中找不到任何参考的事情,我担心我可能正在使用一个功能,该功能可能会在将来的版本中消失,因为这实际上是一个意外的副作用


简而言之,我使用SendLocal发送一条IMessage开始了一个传奇故事。它100%有效,解决了我所有的问题,但它正确吗?

您的解决方案绝对正确,我没有理由不这样做。

我没有发现这种方法有任何技术问题,但您所指的是一个永无止境的传奇。看看你是否能以一种不必投票的方式对你的域名进行建模。谢谢肖恩-我很感谢你的回答。我只是觉得在本地发送一条消息来开始一个传奇故事,而不是发布一个事件,这有点像个预兆。我将向你在这方面的高超学识致敬。谢谢: