【问题标题】:Spring Integration UDP server for clients behind NAT用于 NAT 后面的客户端的 Spring Integration UDP 服务器
【发布时间】:2015-11-06 12:41:34
【问题描述】:

我尝试使用 Spring Integration 实现 UDP 服务器,就像它所描述的 here 一样,但是当客户端在 NAT 后面运行时,它们将永远不会收到来自服务器的响应。这是因为服务器应该从与 UDP 适配器端口相同的端口发送响应数据报(通过 NAT 检查 UDP 解释 here)。

如何使用 Spring Integration 与 NAT 后面的客户端进行正确的 UDP 通信?

【问题讨论】:

    标签: java udp spring-integration nat


    【解决方案1】:

    正如那些线程中所讨论的;目前没有任何 UDP 网关,只有通道适配器。网关用于双向集成。

    多年来对 UDP 网关没有任何需求。

    我们做了make some changes 以方便用户回复传入的消息(通过添加发送端口作为标头)。

    这将允许您构建一个DatagramPacket(可能使用 SI DatagramPacketMessageMapper)并使用您自己的代码将其发送到原始系统。

    如果您希望我们重新考虑提供 UDP 网关,请在 JIRA Issue 上发表评论。更好的是,考虑contributing

    编辑

    对于异步发送,您不需要网关;购买时,您需要调整出站适配器中内置的映射器和消息处理程序。

    DatagramPacketMessageMapperhere更改为使用邮件头设置socketAddress;并向UnicastSendingMessageHandler 添加一个选项,使其不会无条件设置destinationAddress here

    您可以通过子类化处理程序并覆盖send() 方法来做到这一点。

    然后,您可以使用 ref 属性将自定义消息处理程序连接到 <service-activator/>

    【讨论】:

    • 哇!谢谢加里非常快速的回答!我非常愿意做出贡献。或者至少尝试一下。我阅读了贡献者的一般规则,但你能指出一些我可以基于的网关示例吗?或者给我一些快速的建议,我应该在哪里查看现有的 SI 代码?我必须能够从与udp-inbound-channel-adapter 端口相同的端口发送响应。我还必须能够将数据报从服务器异步发送到客户端。
    • 谢谢加里。希望很快我能想出办法。
    • Gary - 我刚刚在我的最终要求中添加了 JIRA 问题:jira.spring.io/browse/INT-3883 带有我的提案的 Pull-request 应该很快就会交付。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多