Apache Camel和Netty作为TCP粘性平衡器

Apache Camel和Netty作为TCP粘性平衡器,tcp,apache-camel,netty,load-balancing,Tcp,Apache Camel,Netty,Load Balancing,我正试图通过ApacheCamel和Netty在多个后端服务器上实现TCP连接的负载平衡 我想将每个到后端的连接映射到每个到Camel的连接。大概是这样的: 客户端连接到Camel Camel选择一个后端服务器并连接到它 客户端向Camel发送一些内容 Camel将其发送到关联的后端服务器 后端服务器回复Camel Camel将其发送回客户端 我的协议是有状态的,客户端和Camel之间的连接将保持打开状态。我还需要从后端到客户端的消息 到目前为止,一切顺利。这是相当不错的工作。 当我连接到同一

我正试图通过ApacheCamel和Netty在多个后端服务器上实现TCP连接的负载平衡

我想将每个到后端的连接映射到每个到Camel的连接。大概是这样的:

  • 客户端连接到Camel
  • Camel选择一个后端服务器并连接到它
  • 客户端向Camel发送一些内容
  • Camel将其发送到关联的后端服务器
  • 后端服务器回复Camel
  • Camel将其发送回客户端
  • 我的协议是有状态的,客户端和Camel之间的连接将保持打开状态。我还需要从后端到客户端的消息

    到目前为止,一切顺利。这是相当不错的工作。 当我连接到同一后端服务器的新客户机时,问题就开始了。Camel似乎重用了已打开的连接,对于后端服务器,它似乎是第一个发送消息的客户机,它没有收到新的连接请求

    我查看了ApacheCammel Netty组件文档,没有找到任何配置此行为的内容

    有可能这样做吗

    旁注:我使用Camel是因为我需要检查协议中的消息以选择后端服务器,也就是说,我需要一个自定义的负载平衡策略。使用Camel提供的任何负载平衡策略都会出现问题,因此它与我的代码无关。

    Camel有一个函数,您只需设置一个表达式,告诉Camel决定需要使用哪个对象哈希代码

    from("direct:start").loadBalance().
                sticky(header("source")).to("mock:x", "mock:y", "mock:z");
    

    我已经做过了。这很好用。问题是到camel的新连接重用了到后端的相同连接。是的,camel-netty尝试尽可能重用该连接。如果连接处于活动状态,则不会为其启动新连接。如果你想改变这种行为,我们需要在camel netty producer内部实现一个新的对象池,以便在代理客户端不同的情况下启动一个新的连接。我明白了。谢谢你的提示。我认为骆驼也不能进行双向沟通。所以它需要更多的改变,也许这甚至不是骆驼的重点。所以我要自己编写整个路由器和平衡器的代码。