Spring TcpInboundGateway主动发送未请求消息的实现方法问询
Spring TcpInboundGateway主动发送未请求消息的实现方法问询
你好呀!针对你使用Spring Integration的TcpInboundGateway时,想要在客户端建立连接后主动发送服务器发起消息的问题,我来给你梳理下具体的实现思路:
关于unsolicitedMessageChannel的配置
从Spring Integration 5.4版本开始,TcpInboundGateway确实支持配置unsolicitedMessageChannel,不过你可能找错了配置入口——这个属性的setter并不是直接在TcpInboundGateway类中暴露的,而是需要通过配置类的Spec或者XML标签来设置:
- 如果用Java DSL配置,可以通过
TcpInboundGatewaySpec的unsolicitedMessageChannel()方法指定通道; - 如果用XML配置,可以在
<int-ip:tcp-inbound-gateway>标签里添加unsolicited-message-channel属性来绑定通道。
不过要注意,unsolicitedMessageChannel主要是用来接收客户端主动发送的无请求对应消息,以及客户端超时后返回的延迟回复,并不是用来触发服务器主动发消息的入口。
服务器主动发送消息的实现方式
你完全不需要额外搭配TcpOutboundGateway,只需要利用连接工厂的TcpSender机制即可:
- 连接工厂会自动注册网关和通道适配器对应的
TcpSender,你不需要手动注册; - 当你需要给某个已连接的客户端主动发消息时,只需要在待发送的消息头中添加
IpHeaders.CONNECTION_ID,指定目标连接的ID; - 将构造好的消息发送到对应的输出通道,框架就会根据连接ID找到对应的客户端连接,完成主动消息发送。
补充说明
如果不知道目标连接的ID,可以通过监听连接事件(比如TcpConnectionOpenEvent)来获取每个客户端连接的ID,后续就可以基于这些ID主动推送消息啦。
备注:内容来源于stack exchange,提问作者Jay Han
相关产品推荐
相关产品推荐

