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



无论如何,以编程方式创建TCP-Connection工厂和TCP-IObound-Channel适配器。

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

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

请参阅动态 ftp 示例,该示例为 ftp 出站适配器执行此操作。

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

另请参阅此答案,其中包含有关在邮件适配器的入站端执行类似操作的其他答案的链接,这次使用 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(...);
}

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

相关内容

最新更新