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