Spring AMQP Rabbit模板发送超时

时间:2014-03-19 04:49:23

标签: java spring timeout rabbitmq amqp

我使用Spring AMQP libarary(1.1.4.Release)将消息发送到Rabbit MQ Exchange。我特意使用RabbitTemplate.correlationconvertAndSend()方法。此RabbitTemplate是使用CachingConnectionFactory创建的,PublisherConfirmsPublisherReturns设置为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)

1 个答案:

答案 0 :(得分:1)

如果您使用的是spring-amqp API,则应该可以根据连接工厂声明amqp-template对象,如下所示:

<rabbit:template id="amqpTemplate" 
        connection-factory="rabbitMQConnectionFactory" 
        reply-timeout="60000"/>

此方法的级别高于rabbitMQ客户端提供的连接超时。它似乎是在客户端发送 - 接收过程中,在到达套接字层之前进行管理的。

希望它可能会有所帮助。