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

问题描述 投票:1回答:1

我们有一个长期运行的传奇过程,其中包括超时,当超时启动时,发生的第一件事就是调用外部数据源。

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

我们觉得我们的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并在必要时以错误队列结束

nservicebus
1个回答
0
投票

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

除了与自己的内部状态交互之外,saga不应该访问数据库,调用Web服务或访问其他资源 - 既不直接也不间接地注入这些依赖项。

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

这是否回答你的问题?

请随时联系支持[email protected]以获取更多详细信息:-)

© www.soinside.com 2019 - 2024. All rights reserved.