2017-02-23 50 views
0

我的情况如下。目前,在我的应用程序中,使用商业库进行输入,以某种专有方式对其进行序列化,然后通过TCP将其发送到服务器。正如我从检查TCP流量中看到的那样,某些输入数据(我们称之为“通话密钥”)保留为“未加密”(即,我可以将发送给服务器的字节序列,并在其中找到“通话密钥“)。TCP“代理”用Spring集成截获TCP流量

我必须修改它,如下所示:拦截TCP流量,查看“通话键”是否为“键A”,然后将输入发送到服务器A.如果通话键是“键B”,则I需要发送到服务器B.

我在想这个目的使用Spring集成,但我不太了解它(我只运行一些示例项目)。

也就是说,我想用商业库发送输入的输入端点(localhost:myport)设置一个“TCP通道”(对不起,如果我使用错误的术语);然后一些组件检查有效载荷,找出“通话密钥”是“密钥A”还是“密钥B”,并相应地将其路由到服务器A或服务器B.

使用现有的Spring集成组件,这确实是可行的吗(即或多或少容易实现)? 如果是,您能指出这种解决方案可能使用哪些Spring集成组件?

回答

1

tcp-client-server-multiplex显示异步代理请求/应答场景的机制;您需要数据中的某些内容才能将回复与请求关联起来。

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

通过简单tcp-client-server样品,在解说中引用,网关的使用和框架可以采取相关的护理(但不会处理大量的,除非你在出站端使用CachingClientConnectionFactory(这实在是你的只有选项,如果你不能添加一些数据来关联答复)

如果你只是在谈论单向消息传递,那么显然不需要关联(并且你不需要聚合器基础设施第一个例子)

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

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

+0

谢谢,非常丰富。 –