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