我使用Spring AMQP libarary(1.1.4.Release)将消息发送到Rabbit MQ Exchange。我特意使用RabbitTemplate.correlationconvertAndSend()方法。此RabbitTemplate是使用CachingConnectionFactory
创建的,PublisherConfirms
和PublisherReturns
设置为true
。
最近,当生产者和消费者在发送消息的过程中与RabbitMQ Broker / Exchange的连接关闭时,我们遇到了网络问题。这导致org.springframework.amqp.AmqpIOException: java.net.SocketException: Broken pipe
被抛出。然而问题是这个异常是在150多岁之后抛出的。这导致所有线程长时间处于阻塞状态。
有什么方法可以设置超时,以便我可以设置,以便我可以获得早期反馈并采取适当的措施。我正在考虑更多的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)
。
答案 0 :(得分:1)
如果您使用的是spring-amqp API,则应该可以根据连接工厂声明amqp-template对象,如下所示:
<rabbit:template id="amqpTemplate"
connection-factory="rabbitMQConnectionFactory"
reply-timeout="60000"/>
此方法的级别高于rabbitMQ客户端提供的连接超时。它似乎是在客户端发送 - 接收过程中,在到达套接字层之前进行管理的。
希望它可能会有所帮助。