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