可以像消息一样重试超时吗?

时间:2019-02-13 15:28:14

标签: nservicebus

我们有一个运行很长时间的传奇过程,其中包括超时,当超时引发的第一件事是对外部数据源的调用。

我们想知道是否合适的是直接查询源并在源关闭(或出现其他问题)时让超时到达错误队列,还是应该让超时创建并发送一条消息进行处理,然后从那里查询源(因此,如果出现问题,消息就会到达错误队列),然后回复给原始发件人

我们认为我们的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并在必要时在错误队列中结束

1 个答案:

答案 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以获取更多详细信息:-)