我嘗試使用Spring集成實現UDP服務器,就像它描述的here一樣,但是當客戶端在NAT後面工作時,它們將永遠不會收到來自服務器的響應。這是因爲服務器應該從與UDP適配器端口相同的端口發送響應數據報(通過NAT解釋UDP,解釋爲here)。Spring集成UDP服務器,用於NAT後面的客戶端
如何使用Spring Integration與NAT後面的客戶端實現正確的UDP通信?
我嘗試使用Spring集成實現UDP服務器,就像它描述的here一樣,但是當客戶端在NAT後面工作時,它們將永遠不會收到來自服務器的響應。這是因爲服務器應該從與UDP適配器端口相同的端口發送響應數據報(通過NAT解釋UDP,解釋爲here)。Spring集成UDP服務器,用於NAT後面的客戶端
如何使用Spring Integration與NAT後面的客戶端實現正確的UDP通信?
正如那些線索所討論的那樣;目前沒有任何UDP的網關,只有通道適配器。網關用於雙向集成。
多年來,UDP網關一直沒有任何需求。
我們做了make some changes以方便用戶回覆收到的消息(通過添加發送端口作爲標頭)。
這將允許您構建一個DatagramPacket
(可能使用SI DatagramPacketMessageMapper
)並使用您自己的代碼將其發送到原始系統。
如果您希望我們重新考慮提供UDP網關,請對JIRA Issue發表評論。更好的是,考慮contributing。
編輯
對於異步發送你並不需要一個網關;買你需要調整內置到出站適配器中的映射器和消息處理程序。
更改DatagramPacketMessageMapper
here以使用消息標頭設置socketAddress
;併爲UnicastSendingMessageHandler
添加一個選項,以便它不會無條件地設置destinationAddress
here。
您可以通過繼承處理程序並覆蓋send()
方法來完成此操作。
然後,您可以使用ref
屬性將自定義消息處理程序連接到<service-activator/>
。
哇!非常快速的答案謝謝你加里!我想貢獻很多。或者至少嘗試一下。我閱讀了貢獻者的一般規則,但是您能否指出我可以基於的某種網關示例?或者給我一些快速的建議,我應該在現有的SI代碼中看看? 我必須能夠從'udp-inbound-channel-adapter'端口發送相同端口的響應。我也必須能夠異步地從服務器發送數據報到客戶端。 – yu55
請參閱編輯我的答案。 –
謝謝你加里。希望不久我會試着弄清楚一些事情。 – yu55