2016-02-21 40 views
0

是否有编程方式创建TCP连接工厂和TCP-IO绑定通道适配器。弹簧集成 - 动态TCP工厂和通道连接

我正在创建一个在其数据库中具有TCP连接详细信息的应用程序。预计TCP连接将增长。连接性的增加需要不重新启动服务器。即如果新的TCP服务器连接细节插入到数据库中,则应用程序应编程地选择连接细节,并在需要时使用Spring集成启动TCP通信,并且不应为此目的重新启动应用程序。

目前我有5个TCP客户端,在我的应用程序中,连接到不同的TCP serverSockets。我为每个连接维护5个XML文件。但是这不支持可伸缩性,因为每个新的serverSocket我都必须在我的应用程序中添加一个新的配置文件,并且需要重新启动它。

+0

你能告诉我你的示例代码我。也有更多的TCP客户端,在我的应用程序中,连接到不同的TCP serverSocket? – Shailesh

+0

@Shailesh请访问这个答案。 http://stackoverflow.com/questions/39062895/spring-integration-tcp-get-connection-id-of-the-connected-clients/39062897#39062897 – learner

+0

@Shailesh。让我知道你是否需要更多的澄清。 – learner

回答

0

请参阅dynamic-ftp sample这是为ftp出站适配器执行此操作。

实质上,它使用自定义路由器为适配器按需创建新的应用程序上下文。

另请参阅this answer其中有关于在邮件适配器的入站端做类似的事情的其他答案的链接,这次使用Java配置。

EDIT

响应于下面的评论。

对于正常的请求/回复处理,使用入站网关,框架将负责将服务激活器回复路由到正确的套接字。它通过使用连接标头来完成。

如果您需要提供任意答复(例如,对于消息不止一个答复,您必须使用入站和出站通道适配器和您的应用程序负责建立连接ID头。

有两种方式来访问所需要的头在由服务激活调用的POJO:

public void foo(byte[] payload, @Header(IpHeaders.CONNECTION_ID) String connectionId) { 
    ... 
} 

public void foo(Message<byte[]> message) { 
    String connectionId = message.getHeaders().get(...); 
} 

然后,当你把你的回复,你需要以某种方式设置标题

+0

嗨加里,我在这里有一个问题,上面的动态TCP连接方法。收到消息时,我想获取收到的消息的TCP连接详细信息。这样我可以跟踪发送该消息的发件人的应用程序。但在服务激活器,我无法得到这个细节。当我的TCP客户端期待从服务器回复时,还需要连接详细信息。有关信息,我的应用程序有多个TCP客户端和服务器。 – learner

+0

你应该真的提出一个新的问题;但看到我的编辑。 –

+0

对不起。我现在把它作为一个问题发布。感谢您对我的查询的友好和快速响应。 http://stackoverflow.com/questions/39062895/spring-integration-tcp-get-connection-id-of-the-connected-clients/39062897#39062897 – learner