我使用Spring AMQP libarary(1.1.4.Release)将消息发送到Rabbit MQ Exchange。我特别使用RabbitTemplate.correlationconvertAndSend()方法。该RabbitTemplate使用CachingConnectionFactory
创建,其中PublisherConfirms
和PublisherReturns
设置为true
。Spring AMQP Rabbit模板发送超时
最近我们发生了一个网络问题,当生产者和消费者在发送消息的过程中关闭了与RabbitMQ Broker/Exchange的连接时。这导致org.springframework.amqp.AmqpIOException: java.net.SocketException: Broken pipe
被抛出。然而,问题在于这个异常在超过150s之后被抛出。这导致所有线程长时间处于阻塞状态。
是否有任何方法可以设置超时时间,以便我可以进行设置以便及早获得反馈并采取适当的措施。我正在考虑更多的http或db调用的超时值。 RabbitMQ的ConnectionFactory的连接超时值为http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.1.0/rabbitmq-java-client-javadoc-3.1.0/com/rabbitmq/client/ConnectionFactory.html#setConnectionTimeout(int)
。
更新 - 发现问题是RabbitMQ的流量控制机制在高流量期间扼杀了发布者.http://www.rabbitmq.com/memory.html#per-connection。 @ francois-gergaud,您是否知道在RabbitMQ服务器进行限制的情况下,回复超时是否有效,即我的发布者客户端将知道Connection超载并可能采取补救措施。 –