精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

介紹SpringCloud中三種服務調用方式

工程師鄧生 ? 來源:CSDN ? 作者:君寶逍遙 ? 2022-09-23 10:52 ? 次閱讀

服務測試環境

1.引入Eureka所需的依賴

2.修改配置文件

3.啟動服務

4.測試

消費者

1.發現客戶端方式

2.Ribbon方式功能的Spring RestTemplate

3.feign客戶端方式

本文主要介紹SpringCloud中調用服務的方式:

Spring DiscoveryClient

支持 Ribbon 的 RestTemplate

Feign客戶端

服務測試環境

測試中,發現Netflix的Eureka服務層采用。

主要步驟如下:

1.引入Eureka所需的依賴



org.springframework.cloud
spring-cloud-starter-eureka-server

 

org.springframework.cloud
spring-cloud-starter-eureka

2.修改配置文件

服務端:

eureka:
instance:
hostname:eureka9001.com#eureka服務端的實例名稱
instance-id:eureka9001
client:
register-with-eureka:false#false表示不向注冊中心注冊自己
fetch-registry:false##false表示自己就是注冊中心,職責就是維護服務實例,并不需要去檢索服務
service-url:
defaulteZone:http://127.0.0.1:9001

客戶端1:

server:
port:8002
spring:
application:
name:licensingservice
eureka:
instance:
instance-id:licensing-service-8002
prefer-ip-address:true
client:
register-with-eureka:true
fetch-registry:true
service-url:
defaultZone:http://127.0.0.1:9001/eureka/,

客戶端2:

server:
port:8002
spring:
application:
name:licensingservice
eureka:
instance:
instance-id:licensing-service-8002
prefer-ip-address:true
client:
register-with-eureka:true
fetch-registry:true
service-url:
defaultZone:http://127.0.0.1:9001/eureka/,

一組微服務的不同實例采辦服務名稱不同,不同的實例ID不同,不同,spring.application.name和eureka.instance.instance-id。

3.啟動服務

服務端:

@SpringBootApplication
@EnableEurekaServer
publicclassEurekaServerPort9001_App{
publicstaticvoidmain(String[]args){
SpringApplication.run(EurekaServerPort9001_App.class,args);
}
}

客戶端:

@SpringBootApplication
@RefreshScope
@EnableEurekaClient
publicclassLicenseApplication_8002{
publicstaticvoidmain(String[]args){
SpringApplication.run(LicenseApplication_8002.class,args);
}
}

4.測試

進入到Eureka服務端地址,我這是127.0.0.1:9001,可以查看注冊到注冊中心的服務。

標簽

b42faa5e-3ae9-11ed-9e49-dac502259ad0.png


注意:Eureka通過兩次服務檢測均到通過,服務將在間隔10秒內成功啟動服務注冊等待30秒。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

消費者

1.發現客戶端方式

服務中既是服務是微信也可以是調用者,消費者配置和上面配置的大體參考一致,依賴及配置服務端啟動方式EnableEurekaClient:監聽啟動。

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
publicclassConsumerApplication_7002{
publicstaticvoidmain(String[]args){
SpringApplication.run(ConsumerApplication_7002.class,args);
}
}

核心配置類:

@Component
publicclassConsumerDiscoveryClient{

@Autowired
privateDiscoveryClientdiscoveryClient;

publicServiceInstancegetServiceInstance(){
ListserviceInstances=discoveryClient.getInstances("licensingservice");
if(serviceInstances.size()==0){
returnnull;
}
returnserviceInstances.get(0);
}

publicStringgetUrl(Stringurl){
ServiceInstanceserviceInstance=this.getServiceInstance();
if(serviceInstance==null)
thrownewRuntimeException("404,NOTFOUND");
StringurlR=String.format(url,serviceInstance.getUri().toString());
returnurlR;
}
}

通過DiscoveryClient從尤里卡中獲取licensingservice服務的實例,并返回第一個實例。

測試控制器

@RestController
@RequestMapping("test")
publicclassTestController{
//注意必須new,否則會被ribbon攔截器攔截,改變URL行為
privateRestTemplaterestTemplate=newRestTemplate();
@Autowired
privateConsumerDiscoveryClientconsumerDiscoveryClient;
@RequestMapping("/getAllEmp")
publicListgetAllLicense(){
Stringurl=consumerDiscoveryClient.getUrl("%s/test/getAllEmp");
returnrestTemplate.getForObject(url,List.class);
}
}

測試:

調試信息

b4590b2e-3ae9-11ed-9e49-dac502259ad0.png

從該圖可以看到licensingservice,擁有兩個服務實例,并可以查看實例信息。

頁面返回信息

b482f33a-3ae9-11ed-9e49-dac502259ad0.png

成功查詢到數據庫存儲信息。

2.Ribbon方式功能的Spring RestTemplate

同上。

核心配置類:

//指明負載均衡算法
@Bean
publicIRuleiRule(){
returnnewRoundRobinRule();
}

@Bean
@LoadBalanced//告訴Spring創建一個支持Ribbon負載均衡的RestTemplate
publicRestTemplaterestTemplate(){
returnnewRestTemplate();
}

設置均衡方式為輪詢方式。

測試類:

@RestController
@RequestMapping("rest")
publicclassConsumerRestController{

@Autowired
privateRestTemplaterestTemplate;
privatefinalstaticStringSERVICE_URL_PREFIX="http://LICENSINGSERVICE";

@RequestMapping("/getById")
publicEmpgetById(Longid){
MultiValueMapparamMap=newLinkedMultiValueMap();
paramMap.add("id",id);
returnrestTemplate.postForObject(SERVICE_URL_PREFIX+"/test/getById",paramMap,Emp.class);
}
}

測試結果:

第一次:

b49c7652-3ae9-11ed-9e49-dac502259ad0.png

第二次:

b4c0d1aa-3ae9-11ed-9e49-dac502259ad0.png

第三次:

b49c7652-3ae9-11ed-9e49-dac502259ad0.png

因為采用輪詢平均方式分別使用不同的服務實例,未區別,將名稱確定了一定的。

這上面,Ribbon 是對第一種方式的封裝方式和不同的負載率。 Feign的方式則大大降低了開發客戶端和提升速度。

3.feign客戶端方式

引入依賴:


org.springframework.cloud
spring-cloud-starter-feign

主要代碼:

@FeignClient(value="LICENSINGSERVICE",fallbackFactory=ServiceImp.class)
publicinterfaceServiceInterface{

@RequestMapping("/test/getById")
EmpgetById(@RequestParam("id")Longid);

@RequestMapping("/test/getLicenseById")
LicensegetLicenseById(@RequestParam("id")Longid);

@RequestMapping("/test/getAllEmp")
ListgetAllLicense();
}
@Component
publicclassServiceImpimplementsFallbackFactory{

@Override
publicServiceInterfacecreate(Throwablethrowable){
returnnewServiceInterface(){
@Override
publicEmpgetById(Longid){
Empemp=newEmp();
emp.setName("iamfeignfallbackcreate");
returnemp;
}

@Override
publicLicensegetLicenseById(Longid){
returnnull;
}

@Override
publicListgetAllLicense(){
returnnull;
}
};
}
}

注采用接口模式,通過指定服務名以及方法,在服務開發結果不佳時,方便返回默認的,而不是一個不友好的錯誤。

主啟動類:

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
publicclassConsumer_feign_Application_7004{
publicstaticvoidmain(String[]args){
SpringApplication.run(Consumer_feign_Application_7004.class,args);
}
}

測試類:

@RestController
@RequestMapping("rest")
publicclassConsumerRestController{
@Autowired
privateServiceInterfaceserviceInterface;

@Autowired
privateRestTemplaterestTemplate;
@RequestMapping("/getById")
publicEmpgetById(Longid){
returnserviceInterface.getById(id);
}
}

測試結果:

正常測試:

b49c7652-3ae9-11ed-9e49-dac502259ad0.png

關閉兩個實例,模擬服務實例死亡:

b550ba36-3ae9-11ed-9e49-dac502259ad0.png

假裝能夠故障服務調用,也可以實現調用的服務時,友好的信息。

以此方式,由低上,從不同層次實現了SpringCloud中的微服務相互引用。




審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模擬器件
    +關注

    關注

    2

    文章

    106

    瀏覽量

    23194
  • 服務端
    +關注

    關注

    0

    文章

    66

    瀏覽量

    6987

原文標題:SpringCloud 三種服務調用方式,你學會了嗎?

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    伺服電機的三種控制方式

    伺服電機控制方式有脈沖、模擬量和通訊這三種,在不同的應用場景下,我們該如何選擇伺服電機的控制方式呢?
    發表于 08-17 11:01 ?7048次閱讀

    FPGA中三種常用復位電路

    在FPGA設計中,復位電路是非常重要的一部分,它能夠確保系統從初始狀態開始啟動并保證正確運行。本文將分別介紹FPGA中三種常用復位電路:同步復位、異步復位和異步復位同步釋放,以及相應的Verilog代碼示例。
    發表于 05-14 14:44 ?2517次閱讀
    FPGA<b class='flag-5'>中三種</b>常用復位電路

    三種復位方式比較

    三種復位方式比較
    發表于 08-16 17:31

    步進電機的三種驅動方式

    步進電機的三種驅動方式
    發表于 01-12 17:03

    STM32的三種boot模式介紹

    淺識STM32的三種boot模式文章目錄淺識STM32的三種boot模式任務摘要一、認識boot1.三種BOOT模式介紹2.開發BOOT模式選擇3.STM32
    發表于 12-10 07:46

    STM32三種啟動方式是什么

    STM32三種啟動方式是什么
    發表于 12-15 07:16

    發電機勵磁方式有哪些_三種發電機勵磁方式

    本文首先介紹了勵磁系統的原理,其次介紹了勵磁系統的組成和發電機獲得勵磁電流的三種方式,最后介紹了發電機勵磁的
    的頭像 發表于 05-09 11:27 ?7.7w次閱讀
    發電機勵磁<b class='flag-5'>方式</b>有哪些_<b class='flag-5'>三種</b>發電機勵磁<b class='flag-5'>方式</b>

    壓供電系統的三種運行方式

    我國低壓供電系統的三種運行方式:國低壓供電系統主要有三種運行方式:TN系統、TT系統、lT系統。
    發表于 05-26 17:06 ?1w次閱讀
    壓供電系統的<b class='flag-5'>三種</b>運行<b class='flag-5'>方式</b>

    三種常見的服務器詳細介紹

    服務器是現實中常被討論的設備之一,因為服務器與現代生活息息相關。按照服務器的用途,服務器可細分為諸多類別。為增進大家對服務器的了解程度,本文
    的頭像 發表于 11-14 10:30 ?8326次閱讀

    伺服電機的三種控制方式該如何應用

    一般伺服都有三種控制方式:速度控制方式,轉矩控制方式,位置控制方式。大多數人想知道的就是這三種
    的頭像 發表于 12-14 23:12 ?5277次閱讀

    如何應用伺服電機的三種控制方式

    一般伺服都有三種控制方式:速度控制方式,轉矩控制方式,位置控制方式。大多數人想知道的就是這三種
    發表于 01-22 06:30 ?7次下載
    如何應用伺服電機的<b class='flag-5'>三種</b>控制<b class='flag-5'>方式</b>

    FPGA應用之vivado三種常用IP核的調用

    今天介紹的是vivado的三種常用IP核:時鐘倍頻(Clocking Wizard),實時仿真(ILA),ROM調用(Block Memory)。
    發表于 02-02 10:14 ?3373次閱讀

    Redis實現限流的三種方式分享

    當然,限流有許多種實現的方式,Redis具有很強大的功能,我用Redis實踐了三種的實現方式,可以較為簡單的實現其方式
    的頭像 發表于 02-22 09:52 ?1037次閱讀

    光伏發電系統中三種DC-DC轉換電路的研究

    電子發燒友網站提供《光伏發電系統中三種DC-DC轉換電路的研究.pdf》資料免費下載
    發表于 11-06 10:21 ?0次下載
    光伏發電系統<b class='flag-5'>中三種</b>DC-DC轉換電路的研究

    介紹三種建模方式

    據量大,而是指樣本的完備性。還有就是大數據或者AI被專業學者或者行業工程師所詬病的就是,純粹的數據驅動搞不出所以然出來,需要領域知識(即Domain Knowledge)的協助。此外,還有第三種建模方式就是混合驅動,即基礎物理模型加上數據驅動的
    的頭像 發表于 01-23 10:48 ?1558次閱讀