我使用spring integration和amqp实现了请求/回复。请求可能需要很长时间才能处理(某些情况下可能需要一个小时),由于某种原因客户端抛出异常 -
Exception in thread "main" org.springframework.integration.handler.ReplyRequiredException: No reply produced by handler 'client', and its 'requiresReply' property is set to true.
我的客户端配置在下面。
<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 :(得分:1)
只要你没有太多的并发请求就没问题了 - 如果你有大量的线程在等待回复,它就不能很好地扩展。
如果你需要扩展它,你可以设计一个与一对出站和入站适配器的异步等价物,但它比使用网关更复杂,实际的实现将取决于你的其余流程。基本上,您必须设置replyTo
标头才能使回复进入入站适配器。
如果您在AMQP网关的上游有一个简单的<gateway/>
,则需要确保replyChannel
标头不会丢失。 See Header Channel Registry
in this section