須要提供一種開箱即用的方式->starterjava
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.1</version> </dependency>//服務端: @Service public class OrderServiceImpl implements IOrderService { @Override public String create() { return "訂單建立成功"; } }#provider properties dubbo.application.name=dubbo-provider dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.scan.base-packages=com.dubbo
// 客戶端 @Reference private IOrderService service; @GetMapping("/order/create") public String create() { return service.create(); }// consumer properties dubbo.application.name=dubbo-client dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.scan.base-packages=com.dubbo---------------算法
負載均衡算法spring
1.隨機(default)apache
2.最小活躍數json
3.權重輪詢api
4.一致性hash安全
客戶端和服務端都可配置(兩端都配置則以客戶端爲準):springboot
@Reference(loadbalance = "random") @Service(weight = 10,loadbalance = "random")-----app
容錯策略 :負載均衡
重試(failover,默認),重試三次
快速失敗(failfast)
記錄日誌(failback)
失敗安全(failsafe),出現異常直接忽略
並行調用多個服務(forKing)
廣播
服務降級
1.錯誤降級
2.限流降級(相似於線程池的拒絕策略)
3.熔斷降級
經過mock實現降級(定義在客戶端):
//timeout = 1 用於測試mock機制 @Reference(loadbalance = "random",timeout = 1, cluster = "failfast",mock = "com.xxx.OrderServiceMock") private IOrderService service; // 客戶端 public class OrderServiceMock implements IOrderService { @Override public String create() { return "當前服務不可用,請稍後再試!"; } } //服務端: @Service public class OrderServiceImpl implements IOrderService { @Override public String create() { try { // 睡一秒,用於測試mock Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return "訂單建立成功"; } }元數據中心配置(能夠簡化URL的長度):
dubbo.metadata-report.address=zookeeper://127.0.0.1:2181<!--最終的數據將移入到節點中保存--> {"parameters":{"cluster":"failsafe","side":"provider","release":"2.7.3","methods":"create","deprecated":"false","dubbo":"2.0.2","weight":"10","interface":"com.bellamy.api.IOrderService","qos.enable":"false","generic":"false","application":"springboot-dubbo","dynamic":"true","register":"true","bean.name":"ServiceBean:com.bellamy.api.IOrderService","anyhost":"true"},"canonicalName":"com.bellamy.api.IOrderService","codeSource":"file:/D:/ProgramFiles/Git/repository/workspace/sc-dubbo-boot/spring-boot-dubbo-api/target/classes/","methods":[{"name":"create","parameterTypes":[],"returnType":"java.lang.String"}],"types":[{"type":"char","typeBuilderName":"org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder"},{"type":"java.lang.String","properties":{"value":{"type":"char[]","typeBuilderName":"org.apache.dubbo.metadata.definition.builder.ArrayTypeBuilder"},"hash":{"type":"int","typeBuilderName":"org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder"}},"typeBuilderName":"org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder"},{"type":"int","typeBuilderName":"org.apache.dubbo.metadata.definition.builder.DefaultTypeBuilder"}]}<!--客戶端與服務端所須要的相關依賴--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.1</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.3</version> </dependency> <!--使用zookeeper做爲註冊中心--> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.0</version> </dependency> <!--若是zk使用的是3.5.x如下的版本,且使用的curator爲4.x.x則須要手動添加此依賴--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.9</version> <exclusions> <exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency>