RabbitTemplate和ReplyTimeOut

时间:2019-04-09 09:13:03

标签: spring-amqp

我有一个项目,我将其超时设置为5秒(getRabbitTemplate (). SetReplyTimeout (5000)),并且使用sendAndReceive方法发送消息:getXbidRabbitTemplate () SendAndReceive (exchange, routingkey, msg)
今天连接出现错误

  

(ShutdownSignalException)

,但两次发货都没有超时。 首批发货发生在09-04-2019 07:25:33.980;第二个时间为09-04-2019 07:25:36.902;


我没有收到答案(或任何错误),并且在连接错误跃迁后不久(在09-04-2019 07:25:52.939)

其他时候,我们检测到超时错误,唯一的配置更改是我们从RabbitTemplate配置中删除了retryTemplate。

这是我们检测超时的方法:

getRabbitTemplate().setReplyTimeout(5000);
mResponse = getRabbitTemplate().sendAndReceive(exchange, routingkey, msg);
if(mResponse == null)
{
      //    TIMEOUT
}

我希望,如果在这5秒钟内没有任何答案,我将进入TIMEOUT部分。如果连接断开并且消息未到达服务器,是否有可能不会发生超时?

1 个答案:

答案 0 :(得分:1)

超时与任何Rabbit通信均无关,调用线程在将来仅调用get(timeout, TimeUnitMilliseconds)。收到答复(在另一个线程上)时,它将完成将来的操作,并且get()返回该结果。如果未收到回复,则get()超时。

我看不到线程永不超时的任何方式。