網(wǎng)站下載到本地合肥seo按天收費
文章目錄
- 一、搭建Nacos服務
- 1、Nacos
- 2、安裝Nacos
- 3、Docker安裝Nacos
- 二、OpenFeign和Dubbo遠程調(diào)用Nacos的服務
- 1、搭建SpringCloudAlibaba的開發(fā)環(huán)境
- 1.1 構(gòu)建微服務聚合父工程
- 1.2 創(chuàng)建子模塊cloud-provider-payment8001
- 1.3 創(chuàng)建子模塊cloud-consumer-order80
- 2、遠程服務調(diào)用OpenFeign
- 2.1 Dubbo和OpenFeign的區(qū)別
- 2.2 創(chuàng)建子模塊cloud-consumer-openfeign-order80
- 2.3 OpenFeign實現(xiàn)服務降級
- 3、遠程服務調(diào)用Dubbo
- 3.1 創(chuàng)建接口服務工程cloud-service-api
- 3.2 創(chuàng)建支付生產(chǎn)者工程cloud-dubbo-provider-payment8001
- 3.3創(chuàng)建消費者cloud-dubbo-consumer-order80
- 3.4 Dubbo實現(xiàn)服務降級
- 總結(jié)
一、搭建Nacos服務
1、Nacos
- Nacos是阿里巴巴開源的服務注冊中心以及配置中心,致力于給開發(fā)者提供一款便捷、簡單上手的開源框架。
Nacos包含了SpringCloud的注冊中心Eureka、服務配置Config、服務總線Bus。 - Nacos提供四大功能,分別是服務發(fā)現(xiàn)和服務健康監(jiān)測、動態(tài)配置服務、動態(tài)DNS服務、服務及其元數(shù)據(jù)管理。
1)服務發(fā)現(xiàn)和服務健康監(jiān)測
Nacos使服務更容易注冊,并通過DNS或HTTP接口發(fā)現(xiàn)其他服務,Nacos還提供服務的實時健康檢查,以防止向不健康的主機或服務實例發(fā)送請求。
2)動態(tài)配置服務
動態(tài)配置服務允許在所有環(huán)境中以集中和動態(tài)的方式管理所有服務的配置。Nacos消除了在更新配置時重新部署應用程序,這使得配置的更改更加高效和靈活。
3)動態(tài)DNS服務
Nacos提供基于DNS協(xié)議的服務發(fā)現(xiàn)能力,旨在支持異構(gòu)語言的服務發(fā)現(xiàn),支持將注冊在Nacos上的服務以域名的方式暴露端點,讓第三方應用方便查閱及發(fā)現(xiàn)。
4)服務及其元數(shù)據(jù)管理
Nacos能讓你從微服務平臺建設的視覺去管理數(shù)據(jù)中心的所有服務及元數(shù)據(jù),包括管理服務的描述、生命周期、服務的靜態(tài)依賴分析、服務的健康狀態(tài)、服務的流量管理、路由及安全策略。
2、安裝Nacos
- 在官網(wǎng)下載Linux的Nacos安裝包:
https://github.com/alibaba/nacos/releases
- 通過mobax將安裝包上傳到虛擬機的/opt目錄下
- 解壓到/usr/local目錄下:
tar -zxvf nacos-server-2.2.3.tar.gz -C /usr/local
- 需要在虛擬機上配置JDK8以上的環(huán)境:
https://blog.csdn.net/weixin_49076273/article/details/126636650
- 進入到nacos的bin目錄下,啟動單機模式的nacos服務器:
sh startup.sh -m standalone
- 在瀏覽器訪問:
http://192.168.126.32:8848/nacos/
3、Docker安裝Nacos
-
安裝Docker:
https://blog.csdn.net/weixin_49076273/article/details/126532188
-
使用Docker拉取鏡像:
docker pull nacos/nacos-server:v2.2.0
-
單機版部署:
docker run --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODE=standalone -e NACOS_SERVER_IP=192.168.126.32 nacos/nacos-server:v2.2.0
-
在瀏覽器訪問:
http://192.168.126.32:8848/nacos/
帳號密碼都是nacos
使用docker容器搭建nacos,如果是nacos2.x需要把9848,9849這兩個端口開放出來即可,這樣就可以使用IDEA連接上Nacos。如果是1.x則直接使用8848端口即可
二、OpenFeign和Dubbo遠程調(diào)用Nacos的服務
1、搭建SpringCloudAlibaba的開發(fā)環(huán)境
1.1 構(gòu)建微服務聚合父工程
-
創(chuàng)建父工程springcloudalibaba
-
配置注解生效激活
-
Java編譯版本選擇
-
父工程的POM文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zzx</groupId><artifactId>springcloudalibaba</artifactId><version>1.0-SNAPSHOT</version><!-- 統(tǒng)一管理jar包版本 --><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><spring-cloud.version>2021.0.0</spring-cloud.version><spring-boot.version>2.6.3</spring-boot.version></properties><!-- 子模塊繼承之后,提供作用:鎖定版本+子modlue不用寫groupId和version --><dependencyManagement><dependencies><!--spring boot 2.6.3--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><!--spring cloud 2021.0.0--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>
-
IDEA開啟Dashboard
1)修改配置文件.idea/workspace.xml
2)添加如下配置<component name="RunDashboard"><option name="ruleStates"><list><RuleState><option name="name" value="ConfigurationTypeDashboardGroupingRule" /></RuleState><RuleState><option name="name" value="StatusDashboardGroupingRule" /></RuleState></list></option><option name="configurationTypes"><set><option value="SpringBootApplicationConfigurationType" /></set> </option> </component>
-
刪除src目錄
1.2 創(chuàng)建子模塊cloud-provider-payment8001
-
在父工程下,右鍵創(chuàng)建子模塊cloud-provider-payment8001
-
在cloud-provider-payment8001的POM文件中添加如下依賴
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> </dependencies>
-
創(chuàng)建cloud-provider-payment8001的主啟動類
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** 主啟動類*/// 注解開啟注冊發(fā)現(xiàn)服務功能 @EnableDiscoveryClient @SpringBootApplication @Slf4j public class PaymentMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentMain8001.class,args);log.info("****** PaymentMain8001 啟動成功 ******");} }
-
在cloud-provider-payment8001的com.zzx.controller包下,創(chuàng)建PaymentController
package com.zzx.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;/*** 支付控制層*/ @RestController @RequestMapping("payment") public class PaymentController {@GetMapping("index")public String index(){return "payment success";} }
-
在cloud-provider-payment8001的resources中,創(chuàng)建application.yml文件
server:port: 8001 spring:application:name: payment-providercloud:nacos:discovery:# Nacos服務的地址server-addr: 192.168.126.32:8848
-
啟動payment8001項目后,在Nacos中的服務管理的服務列表中會出現(xiàn)該服務
1.3 創(chuàng)建子模塊cloud-consumer-order80
-
在父工程下,右鍵創(chuàng)建子模塊cloud-consumer-order80
-
在cloud-consumer-order80的POM文件中添加如下依賴
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> </dependencies>
-
創(chuàng)建cloud-consumer-order80的主啟動類
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** 主啟動類*/// 注解開啟注冊發(fā)現(xiàn)服務功能 @EnableDiscoveryClient @SpringBootApplication @Slf4j public class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class,args);log.info("****** OrderMain80 啟動成功 ******");} }
-
在cloud-consumer-order80的resources中,創(chuàng)建application.yml文件
server:port: 80 spring:application:name: order-consumercloud:nacos:discovery:# Nacos服務的地址server-addr: 192.168.126.32:8848
-
啟動order80項目后,在Nacos中的服務管理的服務列表中會出現(xiàn)該服務
2、遠程服務調(diào)用OpenFeign
2.1 Dubbo和OpenFeign的區(qū)別
- Apache Dubbo是一款微服務開發(fā)框架,他提供了RPC通信與微服務治理兩大關(guān)鍵能力。這意味著使用Dubbo開發(fā)的微服務,將具備相互之間的遠程發(fā)現(xiàn)和通信能力,同時利用Dubbo提供的豐富服務治理能力,可以實現(xiàn)諸如服務發(fā)現(xiàn)、負載均衡、流量調(diào)控等服務治理訴求。
- SpringCloud的通信采用OpenFeign組件。Feign基于Http傳輸協(xié)議,底層實現(xiàn)是Rest。從OSI7層模型上來看Rest屬于應用層。
OpenFeign在高并發(fā)場景下性能不夠理想,成為性能瓶頸。
使用場景:并發(fā)不高,性能要求也不高 - Dubbo框架的通信協(xié)議采用RPC協(xié)議,屬于傳輸層協(xié)議,性能上自然比rest高。提升了交互的性能,保持了長連接,高性能。
Dubbo性能更好,比如支持異步調(diào)用、Netty性能更好。
使用場景:數(shù)據(jù)小,并發(fā)高
2.2 創(chuàng)建子模塊cloud-consumer-openfeign-order80
-
在父工程下,右鍵創(chuàng)建子模塊cloud-consumer-openfeign-order80
-
在cloud-consumer-openfeign-order80的POM文件中添加如下依賴
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- 引入openfeign依賴包 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- 引入負載均衡器依賴包 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency> </dependencies>
-
創(chuàng)建cloud-consumer-openfeign-order80的主啟動類
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients;/*** 主啟動類*/// 注解開啟注冊發(fā)現(xiàn)服務功能 @EnableDiscoveryClient // 開啟feign掃描 @EnableFeignClients @SpringBootApplication @Slf4j public class OrderOpenFeignMain80 {public static void main(String[] args) {SpringApplication.run(OrderOpenFeignMain80.class,args);log.info("****** OrderOpenFeignMain80 啟動成功 ******");} }
-
在cloud-consumer-openfeign-order80的com.zzx.service包中,創(chuàng)建IPaymentFeignService接口
package com.zzx.service;import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.GetMapping;/*** OpenFeign遠程調(diào)用*/ @Service @FeignClient(value = "payment-provider") public interface IPaymentFeignService {@GetMapping("/payment/index")String index(); }
-
在cloud-consumer-openfeign-order80的com.zzx.controller包中,創(chuàng)建OrderController
package com.zzx.controller;import com.zzx.service.IPaymentFeignService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;/*** 訂單微服務*/ @RestController @RequestMapping("order") public class OrderController {@Autowiredprivate IPaymentFeignService iPaymentFeignService;/*** 測試OpenFeign* @return*/@GetMapping("index")public String index(){return iPaymentFeignService.index();} }
-
在cloud-consumer-openfeign-order80的resources中,創(chuàng)建application.yml文件
server:port: 80 spring:application:name: order-consumer-openfeigncloud:nacos:discovery:# Nacos服務的地址server-addr: 192.168.126.32:8848
-
啟動openfeign-order80項目后,在Nacos中的服務管理的服務列表中會出現(xiàn)該服務
-
在瀏覽器上測試使用OpenFeign進行遠程服務調(diào)用,輸入:
http://localhost/order/index
此時返回payment success即調(diào)用成功
2.3 OpenFeign實現(xiàn)服務降級
-
在cloud-consumer-openfeign-order80的POM文件中,引入服務降級的依賴
<!-- 引入服務降級依賴包 --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
-
在cloud-consumer-openfeign-order80的resources下的application.yml文件中,添加如下配置開啟openfeign對sentinel的支持
feign:sentinel:enabled: true
-
在cloud-provider-payment8001的PaymentController中添加如下超時方法
@GetMapping("timeout") public String timeout(){try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {throw new RuntimeException(e);}return "payment success"; }
-
在cloud-consumer-openfeign-order80的OrderController中添加如下超時方法
@GetMapping("timeout") public String timeout(){return iPaymentFeignService.timeout(); }
-
在cloud-consumer-openfeign-order80的IPaymentFeignService中添加如下超時方法
@GetMapping("/payment/timeout") String timeout();
-
在瀏覽器上測試使用OpenFeign進行遠程服務調(diào)用,輸入:
http://localhost/order/timeout
此時返回報500錯誤,控制臺顯示讀取超時
-
實現(xiàn)服務降級的回調(diào)方法
-
需要在cloud-consumer-openfeign-order80的IPaymentFeignService接口中指定服務降級回調(diào)類
@FeignClient(value = "payment-provider",fallback = PaymentServiceFallback.class)
2)在cloud-consumer-openfeign-order80的com.zzx.fallback包下,創(chuàng)建PaymentServiceFallback服務降級回調(diào)類
package com.zzx.fallback;import com.zzx.service.IPaymentFeignService; import org.springframework.stereotype.Component;@Component public class PaymentServiceFallback implements IPaymentFeignService {@Overridepublic String index() {return null;}/*** 服務降級方法* @return*/@Overridepublic String timeout() {return "系統(tǒng)繁忙,請稍后再試";} }
- 在瀏覽器訪問:
http://localhost/order/timeout
此時會進行服務降級,回調(diào)服務降級類對應的方法
3、遠程服務調(diào)用Dubbo
3.1 創(chuàng)建接口服務工程cloud-service-api
-
在父工程下,右鍵創(chuàng)建子模塊cloud-service-api
-
創(chuàng)建一個公共支付接口
package com.zzx.service;/*** 支付接口*/ public interface IPaymentService {String index(); }
3.2 創(chuàng)建支付生產(chǎn)者工程cloud-dubbo-provider-payment8001
-
在父工程下,右鍵創(chuàng)建子模塊cloud-dubbo-provider-payment8001
-
在cloud-dubbo-provider-payment8001的POM文件中,添加如下依賴
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.zzx</groupId><artifactId>cloud-service-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId><version>2021.0.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency> </dependencies>
-
在cloud-dubbo-provider-payment8001中創(chuàng)建主啟動類PaymentDubboMain8001
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** 主啟動類*/ @SpringBootApplication @Slf4j @EnableDiscoveryClient public class PaymentDubboMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentDubboMain8001.class,args);log.info("********** PaymentDubboMain8001 啟動成功 ***********");} }
-
在cloud-dubbo-provider-payment8001的resources中,創(chuàng)建application.yml,添加如下配置
server:port: 8001 spring:main:allow-bean-definition-overriding: trueallow-circular-references: trueapplication:# 應用名name: payment-provider-dubbocloud:nacos:discovery:# Nacos服務地址server-addr: 192.168.126.32:8848 # dubbo配置 dubbo:# dubbo 服務實現(xiàn)類掃描包scan:base-packages: com.zzx.serviceregistry:# 注冊地址address: nacos://192.168.126.32:8848timeout: 10000# Dubbo服務暴露協(xié)議的配置protocol:name: dubbo# port為協(xié)議端口,(-1表示自增端口,從20880開始)port: -1
-
在cloud-dubbo-provider-payment8001中,創(chuàng)建支付業(yè)務層PaymentServiceImpl
package com.zzx.service.impl;import com.zzx.service.IPaymentService; import org.apache.dubbo.config.annotation.DubboService; import org.apache.dubbo.config.annotation.Method;/*** 支付業(yè)務層*/ //以下是只將index方法注冊到dubbo中 @DubboService(timeout = 5000,methods = {@Method(name="index",retries = 2)}) public class PaymentServiceImpl implements IPaymentService {@Overridepublic String index() {return "dubbo payment";} }
-
啟動該服務后,查看該服務是否在Nacos中注冊
3.3創(chuàng)建消費者cloud-dubbo-consumer-order80
-
在父工程下,右鍵創(chuàng)建子模塊cloud-dubbo-consumer-order80
-
在cloud-dubbo-consumer-order80的POM文件中,添加如下依賴
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.zzx</groupId><artifactId>cloud-service-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId><version>2021.0.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency></dependencies>
-
創(chuàng)建cloud-dubbo-consumer-order80的主啟動類
package com.zzx;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication @Slf4j @EnableDiscoveryClient public class OrderDubboMain80 {public static void main(String[] args) {SpringApplication.run(OrderDubboMain80.class,args);log.info("******* OrderDubboMain80 啟動成功 ******");} }
-
在cloud-dubbo-consumer-order80的resources中,創(chuàng)建application.yml配置文件,添加如下配置
server:port: 80 spring:main:allow-circular-references: true#在 Spring Boot 2.1 以及更高的版本增加該設定,因為 Spring Boot 默認調(diào)整了 Bean 定義覆蓋行為。allow-bean-definition-overriding: trueapplication:#應用名字name: order-consumer-dubbocloud:nacos:discovery:#Nacos地址server-addr: 192.168.126.32:8848#dubbo配置 dubbo:cloud:#dubbo.cloud.subscribed-services:表示要訂閱服務的服務名,可以配置'*',代表訂閱所有服務,不推薦使用。若需訂閱多應用,使用 "," 分割。subscribed-services: "*"registry:# 注冊至Nacosaddress: nacos://192.168.126.32:8848# 超時時間timeout: 10000protocol:# 協(xié)議Dubboname: dubbo# 端口號port: -1consumer:check: false
-
在cloud-dubbo-consumer-order80中創(chuàng)建訂單業(yè)務層OrderService
package com.zzx.service;import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.stereotype.Service;/*** 訂單業(yè)務層*/ @Service public class OrderService {//支付服務遠程調(diào)用@DubboReferenceprivate IPaymentService iPaymentService;public String index(){return iPaymentService.index();} }
-
在cloud-dubbo-consumer-order80中創(chuàng)建訂單控制層OrderController
package com.zzx.controller;import com.zzx.service.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;/*** 訂單控制層*/ @RestController @RequestMapping("/order") public class OrderController {@Autowiredprivate OrderService orderService;/*** 測試Dubbo遠程調(diào)用服務* @return*/@GetMapping("/index")public String index(){return orderService.index();} }
-
啟動該服務后,在瀏覽器訪問:
http://localhost/order/index
3.4 Dubbo實現(xiàn)服務降級
-
在cloud-dubbo-provider-payment8001的PaymentServiceImpl實現(xiàn)類中,設置服務生產(chǎn)者集群容錯模式cluster
@DubboService(timeout = 5000,methods = {@Method(name="index",retries = 2)},cluster = "failfast")
1)Failfast Cluster模式:這種模式稱為快速失敗模式,調(diào)用只執(zhí)行一次,失敗則立即報錯。
2)Failsafe Cluster模式:失敗安全模式,如果調(diào)用失敗, 則直接忽略失敗的調(diào)用,而是要記錄下失敗的調(diào)用到日志文件。
3)Failback Cluster模式:失敗自動恢復,后臺記錄失敗請求,定時重發(fā)。通常用于消息通知操作。
4)Forking Cluster模式:并行調(diào)用多個服務器,只要一個成功即返回。通常用于實時性要求較高的讀操作,但需要浪費更多服務資源。
5)Broadcast Cluster模式:配置值為broadcast。廣播調(diào)用所有提供者,逐個調(diào)用,任意一臺報錯則報錯(2.1.0開始支持)。通常用于通知所有提供者更新緩存或日志等本地資源信息。 -
在cloud-dubbo-consumer-order80中,創(chuàng)建服務降級的回調(diào)類PaymentServiceFallback
package com.zzx.service.fallback;import com.zzx.service.IPaymentService;/*** 支付服務降級處理*/ public class PaymentServiceFallback implements IPaymentService {@Overridepublic String index() {return "服務繁忙,請稍后再試!";} }
-
在cloud-dubbo-consumer-order80的OrderService中,在DubboReference注解中添加一個mock指定回調(diào)類
@DubboReference(mock = "com.zzx.service.fallback.PaymentServiceFallback")
-
先將dubbo的生產(chǎn)者跟消費者啟動,然后關(guān)閉生產(chǎn)者,再訪問:
http://localhost/order/index
即配置了訪問服務生產(chǎn)者失敗后,立刻調(diào)用服務降級類的對應方法。
總結(jié)
- 在高并發(fā)場景下使用Dubbo,因為Dubbo長連接,如果不是高并發(fā)會浪費資源;低并發(fā)或者性能要求不高使用OpenFeign,因為OpenFeign不是長連接并且便于使用。