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

时间:2014-09-08 13:24:51

标签: tcp apache-camel netty load-balancing

我试图通过Apache Camel和Netty在多个后端服务器上加载平衡TCP连接。

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

  1. 客户端连接到Camel。
  2. Camel选择后端服务器并连接到它。
  3. 客户端向Camel发送内容。
  4. Camel将其发送到关联的后端服务器。
  5. 后端服务器回复Camel。
  6. Camel将其发回给客户。
  7. ...
  8. 我的协议是有状态的,客户端和Camel之间的连接将保持打开状态。我还需要从后端开始并转到客户端的消息。

    到目前为止,这么好。这工作得很好。 当我连接到同一个后端服务器的新客户端时,我的问题就出现了,看起来Camel重用已经打开的连接,对于后端服务器,它看起来像第一个客户端发送了消息,它没有收到一个新的连接请求。

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

    是否可以这样做?

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

1 个答案:

答案 0 :(得分:0)

Camel有一个sticky loadbalancer,你只需要设置一个表达式来告诉camel决定它需要使用哪个对象哈希码。

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