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

Can timeouts be retried like messages?

我们有一个很长的 运行 saga 过程,其中包括超时,当超时开始时,首先发生的事情是调用外部数据源。

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

我们觉得我们的 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 将在必要时重试并最终进入错误队列

好吧,Sagas 的第一条规则是不要在 saga 处理程序中执行 I/O,而是将命令发送给 worker 处理程序...

Other than interacting with its own internal state, a saga should not access a database, call out to web services, or access other resources - neither directly nor indirectly by having such dependencies injected into it.

此处提供了完整的详细信息:https://docs.particular.net/nservicebus/sagas/#accessing-databases-and-other-resources-from-a-saga

这是否回答了您的问题?

请随时联系支持支持@particular.net以获取更多详细信息:-)