Sockets Spring集成-动态TCP工厂和通道连接

Sockets Spring集成-动态TCP工厂和通道连接,sockets,dynamic,tcp,spring-integration,loading,Sockets,Dynamic,Tcp,Spring Integration,Loading,是否仍然可以通过编程方式创建TCP连接工厂和TCP IObound通道适配器 我正在创建一个应用程序,它的数据库中有TCP连接的详细信息。TCP连接预计会增长。连接的增加需要避免服务器重新启动。i、 e.如果在DB中插入了新的TCP服务器连接详细信息,应用程序应以编程方式选择连接详细信息,并在需要时使用Spring集成启动TCP通信,并且不应为此目的重新启动应用程序 目前,我的应用程序中有5个TCP客户端连接到不同的TCP服务器套接字。我为每个连接维护5个XML文件。但这不支持可伸缩性,对于每个

是否仍然可以通过编程方式创建TCP连接工厂和TCP IObound通道适配器

我正在创建一个应用程序,它的数据库中有TCP连接的详细信息。TCP连接预计会增长。连接的增加需要避免服务器重新启动。i、 e.如果在DB中插入了新的TCP服务器连接详细信息,应用程序应以编程方式选择连接详细信息,并在需要时使用Spring集成启动TCP通信,并且不应为此目的重新启动应用程序

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

请参阅为ftp出站适配器执行此操作的

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

另外,还可以查看其中的链接,这些链接指向在邮件适配器的入站端执行类似操作的其他答案,这次使用Java配置

编辑

针对下面的评论

对于正常的请求/应答处理,使用入站网关,框架将负责将ServiceActivator应答路由到正确的套接字。它通过使用连接id头来实现这一点

如果需要提供任意回复(例如,一条消息有多个回复),则必须使用入站和出站通道适配器,并且应用程序负责设置连接id标头

有两种方法可以访问由服务激活器调用的POJO中所需的标头:

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

public void foo(Message<byte[]> message) {
    String connectionId = message.getHeaders().get(...);
}
public void foo(字节[]有效负载,@Header(IpHeaders.CONNECTION\u ID)字符串connectionId){
...
}
公共void foo(消息消息){
字符串connectionId=message.getHeaders().get(…);
}

然后,当您发送回复时,您需要以某种方式设置该标头。

嗨,Garry,我在这里遇到了上述动态TCP连接方法的问题。当收到消息时,我想获取收到消息的TCP连接详细信息。这样我可以在我的应用程序中跟踪发送该消息的发件人。但在服务ac中tivator我无法获取此详细信息。当我的TCP客户端需要服务器答复时,我还需要连接详细信息。有关信息,我的应用程序有多个TCP客户端和服务器。你应该为此提出一个新问题,但请参阅我的编辑。对不起,我现在已将其作为问题发布。感谢你对我的问题的友好和及时回复查询。你能给我看一下你的示例代码吗?我的应用程序中还有更多TCP客户端连接到不同的TCP serverSocket?@Shailesh请访问此答案。@Shailesh。如果需要更多说明,请告诉我。AbstractServerConnectionFactory connFactory=(AbstractServerConnectionFactory)appContext.getBean(“服务器”);列出openConns=connFactory.getOpenConnectionIds();您是如何创建这些数量的连接的?这些连接是在tcp客户端对该tcp服务器发表评论后创建的。