TCP"代理"使用Spring集成拦截TCP流量

时间:2017-02-23 09:14:03

标签: tcp proxy spring-integration

我的情况如下。目前,在我的应用程序中,商业库用于获取输入,以某种专有方式对其进行序列化,然后通过TCP将其发送到服务器。正如我从检查TCP流量,某些输入数据中看到的那样,让我们​​称之为呼叫密钥",留下"解扰" (也就是说,我可以将发送到服务器的字节序列,并在其中找到"调用键")。

我必须修改如下:拦截TCP流量,看看"呼叫键"是"键A",然后将输入发送到服务器A.如果通话键是"键B",我需要将其发送到服务器B.

我正在考虑将Spring Integration用于此目的,虽然我对此并不了解(我只运行了一些示例项目)。

即,我想建立一个" TCP频道" (对不起,如果我使用了错误的术语),商业图书馆将向其发送输入的输入端点(localhost:myport);然后一些组件检查有效负载,找出"呼叫密钥"是"密钥A"或"密钥B",并相应地将其路由到服务器A或服务器B.

使用现有的Spring Integration组件确实可以(即或多或少可以轻松实现)吗? 如果是,您是否可以指出此解决方案可能使用哪些Spring Integration组件?

1 个答案:

答案 0 :(得分:1)

tcp-client-server-multiplex显示了一种异步代理请求/回复方案的机制;您需要数据中的某些内容才能将回复与请求相关联。

它使用聚合器来做到这一点。

使用README中引用的更简单的tcp-client-server示例,使用网关并且框架可以处理相关性(但它不会处理高音量,除非您使用CachingClientConnectionFactory出站方(如果您无法添加与回复相关的数据,那么这是您唯一的选择。)

如果您只谈论单向消息传递,那么显然不需要关联(并且您在第一个示例中不需要聚合器基础结构)。

在任何一种情况下,您只需在流中添加路由器即可路由到A或B出站端点。

有一个较新的基于DSL的TCP示例here可以动态路由。