2014-10-07 62 views
0

我有一个使用spring integration和amqp实现的请求/回复。该请求可能需要很长的时间来处理(他们可能会采取甚至某些情况下,一个小时),由于某种原因,客户端抛出异常 -spring amqp ReplyRequiredException

​​

我的客户端配置如下。

<int-amqp:outbound-gateway 
     id="client" 
     request-channel="in" 
     reply-channel="res" 
     exchange-name="reportingServer" 
     routing-key-expression="'report.req.'+headers.id" 
     amqp-template="amqpTemplate" requires-reply="true"> 
     </int-amqp:outbound-gateway> 

我相信回复超时默认值为-1,表示无限期地等待,但不知道为什么它不工作,任何帮助,将不胜感激。

也有任何已知的问题,在amqp中执行如此长的等待操作,或者它应该会很好吗?

谢谢

+0

超时时间在amqpTemplate上配置,并且没有任何问题。虽然我仍然想知道是否有任何等待时间太长或需要其他配置的问题,谢谢。 – Mark1234 2014-10-07 14:53:15

回答

1

这将是罚款,只要你没有太多的并发请求 - 如果你有线程挂等待答复的gazillions它不会很好地进行缩放。

如果您需要扩展它,您可以设计一对具有一对出站和入站适配器的异步等效方案,但它比使用网关要复杂一点,实际实施将取决于您的其余流程。实质上,您必须设置replyTo标题才能使回复来到入站适配器。

如果您在AMQP网关上游有一个简单的<gateway/>,则需要确保replyChannel标头不会丢失。 See Header Channel Registry in this section

+0

嗨加里谢谢,你可以请帮助了解它是如何有不同的是有一个单独的入站适配器,以获得答复在出站网关回复通道。入站适配器不会有打开的套接字(因此是线程)来接收响应吗? – Mark1234 2014-10-08 13:34:40

+0

是的,但答复需要与请求相关联 - 这在网关中自动发生,您必须在使用2个单独的异步端点时“手动”执行此操作;将有一个线程(默认情况下)处理所有的回复,而不是为每个回复挂起一个线程。就像我说过的,如果你期望在进程中有很多并发请求,我需要看到更多的流程来提供具体的建议。 – 2014-10-08 14:24:41