是否可以在不使用调用 MarkAsComplete 的长超时的情况下为 Saga 设置 TTL?

Is it possible to set TTL for Saga without using long timeout where MarkAsComplete is called?

现在我们完成了从业务角度来看是成功的 sagas,但我们将失败的 sagas 存储了 3 个月 - 我们设置了超时,然后将 saga 标记为已完成。

是否有更通用的方法来设置不涉及底层消息服务的 saga 的生存时间?

例如 AWS SQS 最大延迟为 15 分钟,但对我们来说,每周 运行 一次垃圾收集作业就足够了。 NSB 有这个选项吗?

Is there a more generic way for setting saga's Time-To-Live which does not involve underlying messaging service?

NServiceBus 使用延迟消息实现超时。 SQS 碰巧被限制在最多 15 分钟。为了克服这个限制,传输多次重新安排消息以获得所需的延迟。 Azure 服务总线、RabbitMQ、SQL 服务器传输等其他传输不需要这样做,因为它们可以在必要的时间内发送单个延迟消息。 RabbitMQ 本身也不支持它,因此它也在内部实现了该功能。没有“通用”的实现。它始终特定于您使用的传输方式。

这正是 NServiceBus 通过使用延迟传递所做的事情。不幸的是,正如您所注意到的,SQS 不支持超过 15 分钟的周期。

您可以使用第 3 方计划库来发送一条消息来完成传奇。 https://docs.particular.net/nservicebus/scheduling/

我也会在内部follow-up看看是否还有其他建议。