我尝试使用Spring Integration实现UDP服务器,如here所述,但当客户端在NAT后面运行时,他们永远不会收到来自服务器的响应。这是因为服务器应该从与UDP适配器端口相同的端口发送响应数据报(通过NAT解释here来检查UDP。)
如何使用Spring Integration与NAT后面的客户端实现正确的UDP通信?
答案 0 :(得分:1)
正如那些话题所讨论的那样;目前没有UDP的网关,只有通道适配器。网关用于双向集成。
多年来,UDP网关几乎没有任何需求。
我们做了make some changes以方便用户回复收到的消息(通过添加发送端口作为标头)。
这将允许您构建DatagramPacket
(可能使用SI DatagramPacketMessageMapper
)并使用您自己的代码将其发送到原始系统。
如果您希望我们重新考虑提供UDP网关,请对JIRA Issue发表评论。更好的是,请考虑contributing。
修改强>
对于异步发送,您不需要网关;买你需要调整内置在出站适配器中的映射器和消息处理程序。
更改DatagramPacketMessageMapper
here以使用邮件标头设置socketAddress
;并为UnicastSendingMessageHandler
添加一个选项,以便它无法无条件地设置destinationAddress
here。
您可以通过继承处理程序并覆盖send()
方法来完成此操作。
然后,您可以使用<service-activator/>
属性将自定义消息处理程序连接到ref
。