【问题标题】:Handling connection failures in apache-camel处理 apache-camel 中的连接失败
【发布时间】:2014-04-17 13:27:47
【问题描述】:

我正在编写一个 apache-camel RabbitMQ 消费者。我想以某种方式对连接问题做出反应(即尝试重新连接)。是否可以配置 apache-camel 自动重连?

如果没有,我怎样才能知道与队列的连接被中断了?我做了以下测试:

  • 启动队列(和一些生产者)
  • 启动我的消费者(它按预期接收消息)
  • 停止队列(消息按预期停止到达,但未引发异常)
  • 启动队列(未收到新消息)

我在 Scala 中使用骆驼(通过 akka-camel),但 Java 解决方案可能也可以

【问题讨论】:

  • 如果您使用的是 Akka,那么这听起来像是监督的完美案例。为您的骆驼消费者端点参与者设置一个单独的主管,从消费者参与者那里获取连接失败异常,然后决定是否向子节点发送消息以重新启动它。这样,您就可以将数据消耗与连接管理的语义分开
  • 但我没有在消费者参与者中遇到异常,因此我不知道如何检测端点不工作
  • 您确定您的消费者参与者没有收到您可能没有在receive PF 中处理的其他消息(如失败)吗?您可以添加case any => println(any),然后查看发生连接失败时是否会受到影响。
  • 我有任何情况,什么都没有发现

标签: scala apache-camel akka


【解决方案1】:

您可以将标志automaticRecoveryEnabled=true 传递给URI,如果连接丢失,Camel 将重新连接。

【讨论】:

    【解决方案2】:

    对于发生故障时的自动 RabbitMQ 资源恢复(Connections/Channels/Consumers/Queues/Exchanages/Bindings),请查看Lyra。示例用法:

    Config config = new Config()
      .withRecoveryPolicy(new RecoveryPolicy()
        .withMaxAttempts(20)
        .withInterval(Duration.seconds(1))
        .withMaxDuration(Duration.minutes(5)));
    ConnectionOptions options = new ConnectionOptions().withHost("localhost");
    Connection connection = Connections.create(options, config);
    

    API 的其余部分只是amqp-client API,除了您的资源在发生故障时会自动恢复。

    我不确定camel-rabbitmq具体是什么,但希望有一种方法可以让你通过Lyra交换你自己的资源创建。

    【讨论】:

      【解决方案3】:

      当前的camel-rabbitmq只是在消费者或生产者启动时创建一个连接和通道。所以它没有机会捕获连接异常:(。

      【讨论】:

        猜你喜欢
        • 2016-01-16
        • 2020-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多