Spring 集成 TCP 服务器到客户端请求响应

问题描述 投票:0回答:1

我有一个用例,我需要使用 TCP 套接字向外部系统发出请求并等待响应。我知道如果我作为客户端连接,则可以使用 Spring Integration Outbound Gateway。 但根据外部系统的要求,我需要将我的服务作为 TCP 服务器启动,并且外部系统将创建到我的服务的多个活动连接。现在,每当我需要时,我应该使用活动连接之一向外部系统发出请求。

我知道适配器的替代方法,但我认为它们不是直接通道并且将异步工作。我必须以线程安全的方式手动选择其中一个连接。 Spring Integration 是否为 Servlet 到客户端请求/响应模式提供任何同步和线程安全的方法?或者在这种情况下使用普通的 java 套接字连接是否更好?

蒂亚

尝试使用Spring集成网关,但对于服务器来说它只支持入站网关

spring spring-boot spring-integration tcpsocket
1个回答
0
投票

是的,你必须使用

Collaborating Outbound and Inbound Channel Adapters
https://docs.spring.io/spring-integration/reference/ip/correlation.html.

您仍然可以通过

@MessagingGateway
从应用程序角度实现同步逻辑,以向选择
TcpSendingMessageHandler
ip_connectionId
生成消息。也将此消息发送到聚合器中。然后,在收到来自
TcpReceivingChannelAdapter
的消息后,您将该消息发送到该聚合器,以获取请求和回复之间的关联以完成该组。该聚合器的结果必须发送到请求消息的
replyChannel
,以将其中继回原始
@MessagingGateway
作为返回值。

我们可能没有这样的示例,但我相信您使用普通 Java 套接字的想法会导致类似的相关解决方案。

不确定您通过网络传输哪些信息才能关联回复。如果您只能基于上述

ip_connectionId
来做到这一点,那么您需要实现连接池逻辑以独占访问它们,直到此连接返回回复。然后您确实可以使用此
ip_connectionId
指示在聚合器中进行关联。

© www.soinside.com 2019 - 2024. All rights reserved.