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

Spring Integration - Dynamic TCP Factory and Channel Connections

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

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

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

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

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

另请参阅 this answer,其中包含有关在邮件适配器的入站端执行类似操作的其他答案的链接,这次使用 Java 配置。

编辑

回复下面的评论。

对于正常的 request/reply 处理,使用入站网关,框架将负责将服务激活器回复路由到正确的套接字。它通过使用连接 ID header.

来完成此操作

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

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

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

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

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