【问题标题】:Is it possible to stop MassTransit service after a saga/consumer completes传奇/消费者完成后是否可以停止 MassTransit 服务
【发布时间】:2021-05-26 10:34:36
【问题描述】:

所以我知道这与 MassTransit 风格有点背道而驰,但我想利用 MT 的一些关键功能,例如消息代理连接管理、sagas、预定消息。

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

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

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

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

【问题讨论】:

    标签: azure masstransit


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢克里斯。是的,如果这只是一个预定的工作,我认为你是对的。但是由计划触发的进程将运行很长时间,并有几个长时间的暂停和状态,这些暂停/重新启动将改变。重新启动受基于时间的规则控制,该规则将改变重新启动的时间。触发 saga 中下一个事件的预定消息似乎很适合这个。当然,我们的另一个选择是根本不停止服务并让它运行等待下一个启动消息。
    猜你喜欢
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多