跨語言調用是壹個很大的話題,也是壹個很有挑戰的技術活,目前業界經常被提及的解決方案有如下幾種,不妨拿出來老生常談壹番:
當我們再聊跨語言調用時我們在聊什麽?縱觀上述幾個較為通用,成熟的解決方案,可以得出結論:解決跨語言調用的思路無非是兩種:
如果壹個新型的團隊面臨技術選型,我認為上述的方案都可以納入參考,可考慮到遺留系統的兼容性問題
舊系統的遷移成本
這也關鍵的選型因素。我們做出的第壹個嘗試,便是在 RPC 協議上下功夫。
通用協議的跨語言支持
springmvc的美好時代
springmvc
springmvc
在沒有實現真正的跨語言調用之前,想要實現“跨語言”大多數方案是使用 .alibaba.dubbo.remoting.exchange.Response
invoke id:消息 id, long 類型。每壹個請求的唯壹識別 id(由於采用異步通訊的方式,用來把請求 request 和返回的 response 對應上)
body length:消息體 body 長度, int 類型,即記錄 Body Content 有多少個字節
body content:請求參數,響應參數的抽象序列化之後存儲於此。
協議報文最終都會變成字節,使用 tcp 傳輸,任何語言只要支持網絡模塊,有類似 Socket 之類的封裝,那麽通信就不成問題。那,跨語言難在哪兒?以其他語言調用 java 來說,主要有兩個難點:
ps:dubbo 協議通訊demo( /lexburner/Dubbojs-Learning )