masstransit - 如何暂停 Mass Transit 处理队列中的消息

标签 masstransit

我有一个公共(public)交通服务总线,它正在监听多个队列并处理消息。我想以某种方式暂停新请求的处理并等待当前请求完成,以便我可以运行一些内务处理任务。

我个人的一些想法:

  • 我调查了服务总线BeforeConsumingMessage处理程序,虽然这将允许我检查数据库中的“暂停处理”标志,但我不确定我将如何实际暂停处理!
  • 我们正在使用 RabbitMQ - 我可以使用它来将队列置于挂起状态吗?
  • 我在这个主题上发现的太少了,以至于我想知道这是否是一种“反模式”,如果我想运行一些家政工作并相信任何部分完整的 sagas 会在服务总线启动备份。 (不过,不要选择这个选项)。

  • 所以我的问题是:有没有办法指示服务总线完成对当前 sagas 的处理但不再从队列中获取任何消息?

    最佳答案

    彻底关闭 MT 服务将等待处理中的任何消息完全完成。为什么有时服务需要一段时间才能关闭。关闭服务是处理此问题的最佳方法,您确定 MT 不会拉任何新消息。

    如果您的 sagas 被序列化到后备存储,例如NHibernate,然后状态将被保存,直到服务重新启动,并且 saga 将恢复到它们在处理最后一条消息后留下的状态。你的 body 应该很好。在任何维护期间,我们都会一直这样做。

    如果您真的必须让服务继续运行,请调用 DisposeIServiceBus实例。这将做同样的事情,让当前消费者完成然后释放所有资源。完成维护后,您可以根据需要创建一个新的 IServiceBus 实例。

    关于masstransit - 如何暂停 Mass Transit 处理队列中的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216942/

    相关文章:

    masstransit - 为什么我在跳过的队列中收到消息

    rabbitmq - 在 MassTransit 上动态创建队列

    amazon-web-services - MassTransit.RabbitMqTransport.RabbitMqAddressException : 'The invalid scheme was specified: amqps'

    msmq - 如何修复 MassTransit 的错误

    c# - MassTransit saga 运行时预取 > 1

    .net-core - 添加上下文到 DI CreateScope

    .net - NServiceBus 与 MassTransit

    c# - 如何反转/注入(inject)依赖 - MassTransit Consumer

    c# - 如何使用大众运输