我是NServiceBus的新手,我正在尝试做一些看起来比它应该更难的事情......所以如果我错过了关于nsb更大图片的内容,我就开始徘徊。
以下是该方案:
我欢迎可能有用的纠正批评,示例或链接。提前谢谢!
答案 0 :(得分:2)
您可以通过NSB管道执行此操作。您可以将处理程序配置为按指定的顺序执行。在您的情况下,这将通过通知以书结尾。根据用例,将通知转发到仅处理这些类型通信的另一个端点可能更好。您需要考虑的是故障情景。如果处理程序失败并且重试了消息,会发生什么?
这完全取决于您不需要维护状态的想法。如果您这样做,那么您将需要考虑使用Saga。这将保持每个长时间运行事务的状态,并为您提供一些您可能需要的功能,例如超时。
答案 1 :(得分:1)
根据NServiceBus website,您可以将NSB端点公开为WCF服务:
互操作性
您可以将NServiceBus端点公开为带有as的WCF服务 很少作为一行代码和标准WCF配置。所有你 需要做的是编写一个继承自的空类 NServiceBus.WcfService指定请求的类型和 响应和NServiceBus完成其余的工作如下:
public class MyService : NServiceBus.WcfService<MyCommand, MyErrorCodes> { }
我已经完成了将遗留MSMQ客户端与NServiceBus集成的一些工作 - 它可以工作,但您必须确保消息构造正确。
发送到NServiceBus端点的消息必须包含在<Messages/>
信封中,并且必须具有命名空间。例如:
<Messages xmlns="http://tempuri.net/MyNservicebusMessage">
<MyNservicebusMessage body/> ...etc
</Messages>
此外,如果要使用NServiceBus审核,则必须确保MSMQ“响应队列”消息头具有值,尽管我认为该值不重要。
答案 2 :(得分:1)
长时间运行的进程可以是同步的也可以是异步的。它不可能都是。
您可以使用NServiceBus异步处理长时间运行的任务并生成进度信息。亚当提到了传奇。您可以使用传奇来跟踪进度。它还可以帮助您将流程划分为更精细的任务,并提供自动重试等免费处理瞬态故障的功能。
但是,您必须使用其他机制将进度信息发送回用户。定期轮询,长轮询,隐藏iframe,websockets等等 - 看看SignalR公开的想法。有一个很好的视频here,讨论向浏览器发送通知。