我们有一个运行很长时间的传奇过程,其中包括超时,当超时引发的第一件事是对外部数据源的调用。
我们想知道是否合适的是直接查询源并在源关闭(或出现其他问题)时让超时到达错误队列,还是应该让超时创建并发送一条消息进行处理,然后从那里查询源(因此,如果出现问题,消息就会到达错误队列),然后回复给原始发件人
我们认为我们的NserviceBus代码有点过于复杂,正在寻找简化它的方法,我们想知道这样做是否是个好机会。
public void Timeout(TimeoutEvent event)
{
bus.send(ExternalServiceCallCmd cmd)
}
public void handle(ExternalServiceCallCmd cmd)
{
manager.CallToExternalService();
}
如果对外部服务的调用失败,则将重试ExternalServiceCallCmd并最终导致错误队列。
我们想知道是否可以像这样简化:
public void Timeout(TimeoutEvent event)
{
manager.CallToExternalService();
}
如果对外部服务的调用失败,则将重试TimeoutEvent并在必要时在错误队列中结束
答案 0 :(得分:0)
好吧,Sagas的第一条规则是不要在saga处理程序中执行I / O,而是将命令发送到工作处理程序...
除了与自己的内部状态进行交互之外,传奇不应该访问数据库,调出Web服务或访问其他资源-既不直接也不通过将这种依赖注入到数据库中而间接访问。
此处提供了完整的详细信息:https://docs.particular.net/nservicebus/sagas/#accessing-databases-and-other-resources-from-a-saga
这能回答您的问题吗?
请随时联系support support@particular.net以获取更多详细信息:-)