SpringCloud如何解決服務之間的通信問題
1、如何解決服務之間的通信問題?
[1]HTTP REST方式 使用http協(xié)議進行數(shù)據傳遞 json格式數(shù)據
[2]RPC方式 遠程過程調用 二進制數(shù)據
從OSI七層結構來講,即物理層、數(shù)據鏈路層、網絡層、運輸層、會話層、表示層、應用層。http屬于應用層協(xié)議,而RPC屬于傳輸層,所以RPC方式的傳輸效率比http高。SpringCloud使用的是HTTP協(xié)議傳遞數(shù)據。
2、如何在java代碼中發(fā)起http方式請求?
spring框架提供HttpClient對象 使用RestTemplate發(fā)起一個http請求。
3、實現(xiàn)服務間通信的小案例
3.1 使用兩個測試服務 用戶服務users和訂單服務orders
3.2 用戶服務和訂單服務都是兩個獨立的SpringBoot應用
3.3 兩個服務都引入consul client依賴和健康檢查依賴
<!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--consul client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency>
3.4 配置兩個服務的application.properties
用戶服務:(默認的服務名稱就是Spring.application.name,所以可以不用指定)
server.port=8888 spring.application.name=USERS #consul server spring.cloud.consul.host=localhost spring.cloud.consul.port=8500
訂單服務:
server.port=9999 spring.application.name=ORDERS #consul server spring.cloud.consul.host=localhost spring.cloud.consul.port=8500
3.5 在兩個服務的入口類中加入服務注冊client注解
用戶服務
訂單服務
3.6 控制器開發(fā)(這里進行服務提供者和服務消費者開發(fā)) 3.6.1 服務提供者(訂單服務)
OrderController.java
package com.baizhi.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class OrderController { @GetMapping("order") public String demo(){ log.info("order demo..."); return "order demo OK!!!"; } }
3.6.2 服務消費者(用戶服務)
UserController.java
package com.baizhi.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController @Slf4j public class UserController { @GetMapping("user") public String invokeDemo(){ log.info("user demo..."); //1、調用訂單服務 服務地址:http://localhost:9999/order 必須是get方式 接收返回值String RestTemplate restTemplate = new RestTemplate(); String orderResult = restTemplate.getForObject("http://localhost:9999/order", String.class); log.info("調用訂單服務成功:{}",orderResult); return "調用order服務成功,結果為:"+orderResult; } }
3.7 測試服務調用
在服務啟動之后查看consul服務注冊中心,可以看到用戶服務和訂單服務都注冊成功了。關于consul服務注冊與發(fā)現(xiàn)請看這篇文章:http://www.dbjr.com.cn/article/141790.htm
訪問http://localhost:9999/order
測試訂單服務:
訪問用戶服務(用戶服務中會調用訂單服務)
訂單服務日志:(這里的第二次輸出是因為被用戶服務調用)
用戶服務日志:
4、現(xiàn)有RestTemplate方式通信存在的問題?
- 調用服務的路徑主機和服務端口直接寫死在url中無法實現(xiàn)服務集群時請求負載均衡
- 調用服務的請求路徑寫死在代碼中,日后提供服務路徑發(fā)生變化時不利于后續(xù)維護工作。
5、解決RestTemplate負載均衡問題
- 自定義負載均衡解決策略,但是這樣無法實現(xiàn)服務健康檢查切負載均衡策略過于單一
- 使用SpringCloud提供的組件 推薦使用Ribbon來解決負載均衡的調用問題
到此這篇關于SpringCloud如何解決服務之間的通信問題的文章就介紹到這了,更多相關SpringCloud 服務間通信內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java之判斷2000~2023年有哪些年份是閏年并打印輸出
這篇文章主要介紹了Java之判斷2000~2023年有哪些年份是閏年并打印輸出,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12教你使用eclipse?搭建Swt?環(huán)境的全過程
本文給大家分享使用eclipse?搭建Swt?環(huán)境的全過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12分享Spring?Cloud?OpenFeign?的五個優(yōu)化技巧
這篇文章主要分享的是Spring?Cloud?OpenFeign?的五個優(yōu)化技巧,OpenFeign?是?Spring?官方推出的一種聲明式服務調用和負載均衡組件,更多相關內容需要的小伙伴可以參考一下2022-05-05Maven的配置文件pom.xml詳解(含常用plugin)
pom.xml是Maven項目的核心配置文件,它是 項目對象模型 - Project Object Model(POM)的縮寫,本文我們將全面解析pom.xml,了解其結構和屬性,以及如何使用它來管理項目,感興趣的朋友跟隨小編一起看看吧2024-08-08