【问题标题】:Rebus Publish Exception HandlingRebus 发布异常处理
【发布时间】:2015-12-07 08:58:12
【问题描述】:

假设 rebus 无法将消息发布到 rabbitmq 或其他队列,处理此异常的最佳实践是什么。 我停止了 rabbitmq 服务并 rebus 抛出了 Aggregate 异常。我可以在 try-catch 块中手动捕获这个异常,但是当这种情况发生时,有没有更好的解决方案来捕获异常?

【问题讨论】:

    标签: rebus


    【解决方案1】:

    首先:如果您在最初发送/发布消息时遇到异常(例如,在处理网络请求时),您真的无能为力。对不起;)

    您可能应该彻底记录所有可以记录的信息,然后确保设置日志记录,以便信息最终保存在文件或其他一些持久日志中。然后您应该有某种通知或流程,以确保有人会在某个时候查看日志

    无论您从事什么类型的工作,您都应该有这种日志记录。

    根据您的信息的重要性,您还可以设置某种重试机制(尽管重试时应注意不要消耗线程和过多的内存)。此外,由于您的 Web 应用程序应该能够随时回收,您可能不应该(过多地)依赖重试

    不过,您可以做一些事情,以最大限度地降低风险,最终导致您无法发送/发布。

    我可以建议您使用某种高可用性传输,例如 MSMQ(因为它具有本地传出队列)、RabbitMQ(每台机器上都有一个 shovel),或者如果您使用 Azure 服务总线或 Azure 存储队列'在 Azure 中。

    此外 - 如果您使用 MSMQ,并且想要发布一个事件 - 我建议您先await bus.Send(theEvent),然后在您处理消息时,您await bus.Publish(theEvent)。这是因为 Rebus(使用 MSMQ 传输)需要在订阅存储中进行查找,以便获取给定事件的所有订阅者。 这不是 RabbitMQ 的问题,因为 Rebus 将使用 Rabbit 的主题进行发布/订阅,并且与进行普通发送一样安全。

    当您从 Rebus 消息处理程序中发送/发布时,当然没有问题,因为接收操作将被回滚,最终传入的消息将最终进入错误队列。

    我希望能对情况有所了解:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2018-02-26
      • 2020-05-17
      • 2012-12-01
      • 1970-01-01
      相关资源
      最近更新 更多