Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何容忍RabbitMQ在Langohr重启?_Clojure_Rabbitmq_Langohr - Fatal编程技术网

Clojure 如何容忍RabbitMQ在Langohr重启?

Clojure 如何容忍RabbitMQ在Langohr重启?,clojure,rabbitmq,langohr,Clojure,Rabbitmq,Langohr,我们有从兔子队列读取的Clojure代码。我们愿意容忍RabbitMQ服务器短暂停机的情况,例如在重启的情况下(sudo服务RabbitMQ服务器重启) 在兰戈尔似乎有。我们修改了示例clojurewerkz.langohr.examples.recovery.example1()。与已发布的示例略有不同,包括连接参数和删除lb/publish调用(因为我们使用外部源填充数据) 我们可以成功地使用队列中的数据并等待更多消息。但是,当我们重新启动RMQ时(通过托管RabbitMQ的VM上的上述su

我们有从兔子队列读取的Clojure代码。我们愿意容忍RabbitMQ服务器短暂停机的情况,例如在重启的情况下(
sudo服务RabbitMQ服务器重启

在兰戈尔似乎有。我们修改了示例
clojurewerkz.langohr.examples.recovery.example1
()。与已发布的示例略有不同,包括连接参数和删除
lb/publish
调用(因为我们使用外部源填充数据)

我们可以成功地使用队列中的数据并等待更多消息。但是,当我们重新启动RMQ时(通过托管RabbitMQ的VM上的上述
sudo
命令),会引发以下异常:

Caught an exception during connection recovery!
java.io.IOException
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
    at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
    at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:378)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:516)
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:545)
    at com.novemberain.langohr.Connection.recoverConnection(Connection.java:166)
    at com.novemberain.langohr.Connection.beginAutomaticRecovery(Connection.java:115)
    at com.novemberain.langohr.Connection.access$000(Connection.java:18)
    at com.novemberain.langohr.Connection$1.shutdownCompleted(Connection.java:93)
    at com.rabbitmq.client.impl.ShutdownNotifierComponent.notifyListeners(ShutdownNotifierComponent.java:75)
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:573)
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; reason: java.io.EOFException
    at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
    at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
    at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:343)
    at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:321)
    ... 8 more
Caused by: java.io.EOFException
    at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:273)
    at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)
    at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:131)
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:533)

Langohr提供的预期重启机制很可能在启动时中断。在这些“硬”重启的情况下,是否有首选的替代模式?或者,我认为我们必须自己实现连接监视和重试。任何建议都是非常受欢迎的。

我们曾经看到过这样的堆栈跟踪,但在Langohr 2.9.0中我们不再看到它们。重启后,我们的clojure客户端重新连接,消息再次开始流动

我们使用的是默认设置,它打开了连接和拓扑覆盖,如下所示:

(infof "Automatic recovery enabled? %s" (rmq/automatic-recovery-enabled? connection))
(infof "Topology recovery enabled? %s" (rmq/automatic-topology-recovery-enabled? connection))