saga/consumer 完成后是否可以停止 MassTransit 服务

Is it possible to stop MassTransit service after a saga/consumer completes

所以我知道这运行有点违背 MassTransit 风格,但我想利用 MT 的一些关键功能,例如消息代理连接管理、sagas、计划消息。

不过,我知道这项服务很少会用到。这是来自 API 的一个相当大的数据,每小时有 12,000 个请求的限制。每 24 小时一次,saga 将开始获取数据并将其移动到数据湖中。该服务将 运行 持续几分钟,直到油门被踩下,然后在经过足够的时间后从它停止的地方(状态)重新开始,可能是在 30 分钟后。数据量意味着这将重复几个小时(2 到 4 小时)。

适合传奇和预定的消息似乎很不错。但如果该服务不因 24x7 保持清醒而产生运营成本,那就更好了。对于一组 API 凭据,一次只会有一个请求。有时我们可能会有多组凭据。

有没有办法在 saga 完成时很好地关闭服务?

由于这很可能通过容器实例实现,我建议从队列触发函数或类似函数启动实例。

假设这是您想要采用的方法(与仅由 Azure 调度程序触发的 Azure Web 作业相比),有多种选择:

  1. 当 saga 完成时发布一个事件,使用该事件,使用 Task.Run() 或其他任何方式停止总线。
  2. 使用接收观察器跟踪飞行中的消息,当它达到零并在那里停留 n 秒时,停止总线,退出函数。

虽然我想知道为什么不通过 Azure 使用计划的作业,但似乎更容易,除非 MassTransit 不仅仅用于计划。