Java Spring TCP通过传入连接发送数据
如何配置Spring来接收TCP连接,然后通过它发送数据?我将数据存储在RabbitMQ队列中,需要通过传入连接发送此数据 我假设客户机按照以下方式工作:Java Spring TCP通过传入连接发送数据,java,spring,spring-integration,Java,Spring,Spring Integration,如何配置Spring来接收TCP连接,然后通过它发送数据?我将数据存储在RabbitMQ队列中,需要通过传入连接发送此数据 我假设客户机按照以下方式工作:client mode=true。我已经找到了一个关于如何在这个用例中表现为客户机的例子,但是我找不到服务器端的例子。谁能给我指一下正确的方向吗 我不确定这是否是一个标准用例,在我看来,客户端正在启动连接,而不是服务器,但我对TCP几乎没有经验。您不需要客户端模式;这适用于希望入站适配器启动套接字打开的情况。使用带有服务器连接工厂的TcpSen
client mode=true
。我已经找到了一个关于如何在这个用例中表现为客户机的例子,但是我找不到服务器端的例子。谁能给我指一下正确的方向吗
我不确定这是否是一个标准用例,在我看来,客户端正在启动连接,而不是服务器,但我对TCP几乎没有经验。您不需要客户端模式;这适用于希望入站适配器启动套接字打开的情况。使用带有服务器连接工厂的
TcpSendingMessageHandler
侦听端口
添加一个侦听TcpConnectionOpenEvent
的ApplicationListener
bean
事件将具有连接id,对于任何发送的消息,您必须在消息头(
IpHeaders.connection\u id
)中捕获并设置该id,以便适配器知道将消息发送到何处。但相同的文档中包含入站配置示例2段落;]我想我不明白它是怎么工作的。。。TcpInboundGateway
有一个请求通道
和一个回复通道
,用于返回对请求的回复。如果客户端连接时没有任何消息,只是想接收数据,我仍然应该使用TcpInboundGateway
?是的,客户端仍然是“initializind”端。请记住,发送数据是在建立连接之后很久的事情。如果您已清除连接,则无论客户端在做什么,都允许您将数据写入基础套接字。请使用带服务器连接工厂的出站适配器。看我的答案。我想你是指TcpSendingMessageHandler
?如果我想将消息发送到所有打开的连接,我假设我必须将来自服务器连接工厂(connectionFactoryName
事件参数)的每个连接id的消息相乘,并删除TcpConnectionClosedEvent
上的连接。是的,对不起;固定的。如果要向所有连接广播,只需在服务器连接工厂中调用getOpenConnectionIds()
;它将返回当前打开的连接ID列表(存在竞争,因此需要捕获异常,以防连接同时关闭)。