SpringCloud如何解決服務(wù)之間的通信問(wèn)題
1、如何解決服務(wù)之間的通信問(wèn)題?
[1]HTTP REST方式 使用http協(xié)議進(jìn)行數(shù)據(jù)傳遞 json格式數(shù)據(jù)
[2]RPC方式 遠(yuǎn)程過(guò)程調(diào)用 二進(jìn)制數(shù)據(jù)
從OSI七層結(jié)構(gòu)來(lái)講,即物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、運(yùn)輸層、會(huì)話(huà)層、表示層、應(yīng)用層。http屬于應(yīng)用層協(xié)議,而RPC屬于傳輸層,所以RPC方式的傳輸效率比http高。SpringCloud使用的是HTTP協(xié)議傳遞數(shù)據(jù)。
2、如何在java代碼中發(fā)起http方式請(qǐng)求?
spring框架提供HttpClient對(duì)象 使用RestTemplate發(fā)起一個(gè)http請(qǐng)求。
3、實(shí)現(xiàn)服務(wù)間通信的小案例
3.1 使用兩個(gè)測(cè)試服務(wù) 用戶(hù)服務(wù)users和訂單服務(wù)orders
3.2 用戶(hù)服務(wù)和訂單服務(wù)都是兩個(gè)獨(dú)立的SpringBoot應(yīng)用

3.3 兩個(gè)服務(wù)都引入consul client依賴(lài)和健康檢查依賴(lài)
<!--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 配置兩個(gè)服務(wù)的application.properties
用戶(hù)服務(wù):(默認(rèn)的服務(wù)名稱(chēng)就是Spring.application.name,所以可以不用指定)
server.port=8888 spring.application.name=USERS #consul server spring.cloud.consul.host=localhost spring.cloud.consul.port=8500

訂單服務(wù):
server.port=9999 spring.application.name=ORDERS #consul server spring.cloud.consul.host=localhost spring.cloud.consul.port=8500

3.5 在兩個(gè)服務(wù)的入口類(lèi)中加入服務(wù)注冊(cè)client注解
用戶(hù)服務(wù)

訂單服務(wù)

3.6 控制器開(kāi)發(fā)(這里進(jìn)行服務(wù)提供者和服務(wù)消費(fèi)者開(kāi)發(fā)) 3.6.1 服務(wù)提供者(訂單服務(wù))
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 服務(wù)消費(fèi)者(用戶(hù)服務(wù))
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、調(diào)用訂單服務(wù) 服務(wù)地址:http://localhost:9999/order 必須是get方式 接收返回值String
RestTemplate restTemplate = new RestTemplate();
String orderResult = restTemplate.getForObject("http://localhost:9999/order", String.class);
log.info("調(diào)用訂單服務(wù)成功:{}",orderResult);
return "調(diào)用order服務(wù)成功,結(jié)果為:"+orderResult;
}
}
3.7 測(cè)試服務(wù)調(diào)用
在服務(wù)啟動(dòng)之后查看consul服務(wù)注冊(cè)中心,可以看到用戶(hù)服務(wù)和訂單服務(wù)都注冊(cè)成功了。關(guān)于consul服務(wù)注冊(cè)與發(fā)現(xiàn)請(qǐng)看這篇文章:http://www.dbjr.com.cn/article/141790.htm

訪(fǎng)問(wèn)http://localhost:9999/order測(cè)試訂單服務(wù):

訪(fǎng)問(wèn)用戶(hù)服務(wù)(用戶(hù)服務(wù)中會(huì)調(diào)用訂單服務(wù))

訂單服務(wù)日志:(這里的第二次輸出是因?yàn)楸挥脩?hù)服務(wù)調(diào)用)

用戶(hù)服務(wù)日志:

4、現(xiàn)有RestTemplate方式通信存在的問(wèn)題?
- 調(diào)用服務(wù)的路徑主機(jī)和服務(wù)端口直接寫(xiě)死在url中無(wú)法實(shí)現(xiàn)服務(wù)集群時(shí)請(qǐng)求負(fù)載均衡
- 調(diào)用服務(wù)的請(qǐng)求路徑寫(xiě)死在代碼中,日后提供服務(wù)路徑發(fā)生變化時(shí)不利于后續(xù)維護(hù)工作。
5、解決RestTemplate負(fù)載均衡問(wèn)題
- 自定義負(fù)載均衡解決策略,但是這樣無(wú)法實(shí)現(xiàn)服務(wù)健康檢查切負(fù)載均衡策略過(guò)于單一
- 使用SpringCloud提供的組件 推薦使用Ribbon來(lái)解決負(fù)載均衡的調(diào)用問(wèn)題
到此這篇關(guān)于SpringCloud如何解決服務(wù)之間的通信問(wèn)題的文章就介紹到這了,更多相關(guān)SpringCloud 服務(wù)間通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java之判斷2000~2023年有哪些年份是閏年并打印輸出
這篇文章主要介紹了Java之判斷2000~2023年有哪些年份是閏年并打印輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
23種設(shè)計(jì)模式(2) java工廠(chǎng)模式
這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java工廠(chǎng)模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
教你使用eclipse?搭建Swt?環(huán)境的全過(guò)程
本文給大家分享使用eclipse?搭建Swt?環(huán)境的全過(guò)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
學(xué)生視角手把手帶你寫(xiě)Java?線(xiàn)程池改良版
作者是一個(gè)來(lái)自河源的大三在校生,以下筆記都是作者自學(xué)之路的一些淺薄經(jīng)驗(yàn),如有錯(cuò)誤請(qǐng)指正,將來(lái)會(huì)不斷的完善筆記,幫助更多的Java愛(ài)好者入門(mén)2022-03-03
分享Spring?Cloud?OpenFeign?的五個(gè)優(yōu)化技巧
這篇文章主要分享的是Spring?Cloud?OpenFeign?的五個(gè)優(yōu)化技巧,OpenFeign?是?Spring?官方推出的一種聲明式服務(wù)調(diào)用和負(fù)載均衡組件,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-05-05
Maven的配置文件pom.xml詳解(含常用plugin)
pom.xml是Maven項(xiàng)目的核心配置文件,它是 項(xiàng)目對(duì)象模型 - Project Object Model(POM)的縮寫(xiě),本文我們將全面解析pom.xml,了解其結(jié)構(gòu)和屬性,以及如何使用它來(lái)管理項(xiàng)目,感興趣的朋友跟隨小編一起看看吧2024-08-08

