nservicebus - 是否可以在不使用调用 MarkAsComplete 的长时间超时的情况下为 Saga 设置 TTL?
问题描述
现在我们完成了从业务角度来看成功的 saga,但我们将失败的 saga 存储了 3 个月——我们设置了超时,然后将 saga 标记为已完成。
是否有更通用的方法来设置不涉及底层消息服务的 saga 的生存时间?
例如,AWS SQS 的最大延迟为 15 分钟,但对我们来说,每周运行一次垃圾收集作业就足够了。NSB有这个选项吗?
解决方案
是否有更通用的方法来设置不涉及底层消息服务的 saga 的生存时间?
NServiceBus 使用延迟消息实现超时。SQS 恰好被限制为最多 15 分钟。为了克服这个限制,传输多次重新调度消息以获得所需的延迟。Azure 服务总线、RabbitMQ、SQL Server 传输等其他传输不需要这样做,因为它们可以在必要的时间内发送一条延迟消息。RabbitMQ 本身也不支持它,因此它也在内部实现了该功能。没有“通用”实现。它始终特定于您使用的传输方式。
这正是 NServiceBus 通过使用延迟交付所做的事情。不幸的是,您注意到的 SQS 不支持超过 15 分钟的时间段。
您可以使用 3rd 方调度库,该库将发送一条完成传奇的消息。https://docs.particular.net/nservicebus/scheduling/
我也会在内部跟进,看看是否有其他建议。
推荐阅读
- fullcalendar - 无法添加营业时间 - 周末 - fullcalendar v4
- firebase - 有没有办法在 Firestore 安全规则中找到拒绝访问的行?
- python - 期货 ProcessPoolExecutor() 的 pyQt5 问题
- python - 如何将单元格中具有多个值的csv转换为python中的嵌套json
- apache-nifi - InvalidMagicIdException:无法在 infinispan 中添加缓存
- google-apps-script - 谷歌表格脚本编辑器 - 如果 E 列中有特定文本,则发送电子邮件
- vim - 如何输入与上行字符数一样多的连字符?
- html - react 使用 html4、html5 还是 jsx?
- java - json反序列化对于有效格式失败
- python - 了解 unicodedata.normalize() 的 unistr