241.10. 通过与请求/续订的单一连接进行多元并发消息
使用 Netty 通过 netty producer 进行请求/消息传递时,默认情况下,每条消息通过非共享连接(pooled)发送。这样可确保回复自动映射到正确的请求线程,以便在 Camel 中进行进一步路由。换句话说,请求/恢复消息之间的相关性发生在开箱即用,因为回复返回了用于发送请求的相同连接;此连接不与其他人共享。当响应返回时,连接将返回到连接池,以供其他人重复使用。
但是,如果您要在单个共享连接上多个并发请求/响应,则需要通过设置 producerPoolEnabled=false
来关闭连接池。现在,如果回复返回顺序,则会出现交集响应的问题。因此,您需要在请求和回复消息中都有关联 id,以便可以正确地将负责在 Camel 中处理消息的 Camel 回调的回复关联。要执行此操作,您需要实施 NettyCamelStateCorrelationManager
作为关联管理器,并通过 correlationManager=#myManager
选项进行配置。
我们建议在构建自定义关联管理器时,扩展 TimeoutCorrelationManagerSupport
。这为超时和其他复杂性提供支持。
您可以在 camel-example-netty-custom-correlation
目录下找到 Apache Camel 源代码的示例。