无论如何都以编程方式创建TCP-Connection工厂和TCP-IObound-Channel适配器。
我正在创建一个在其数据库中具有TCP连接详细信息的应用程序。并且TCP连接预计会增长。连接的增加需要没有服务器重启。即,如果将新的TCP服务器连接详细信息插入到DB中,应用程序应该以编程方式选择连接详细信息并在需要时使用Spring Integration启动TCP通信,并且不应该为此目的重新启动应用程序。
目前我的应用程序中有5个TCP客户端连接到不同的TCP服务器套接字。我为每个连接维护5个XML文件。但是这不支持可伸缩性,因为对于每个新的serverSocket,我必须在我的应用程序中添加一个新的配置文件,并且需要重新启动它。
答案 0 :(得分:0)
请参阅dynamic-ftp sample,它为ftp出站适配器执行此操作。
本质上,它使用自定义路由器按需为适配器创建新的应用程序上下文。
另请参阅this answer,其中包含有关在邮件适配器的入站端执行类似操作的其他答案的链接,这次使用Java配置。
修改强>
回应以下评论。
对于正常的请求/回复处理,使用入站网关,框架将负责将服务激活器回复路由到正确的套接字。它通过使用连接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(...);
}
然后,当您发送回复时,您需要以某种方式设置该标题。