前言
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比防城港網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式防城港網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋防城港地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
SpringCloud 是微服務(wù)中的翹楚,最佳的落地方案。
在微服務(wù)架構(gòu)中多層服務(wù)之間會(huì)相互調(diào)用,如果其中有一層服務(wù)故障了,可能會(huì)導(dǎo)致一層服務(wù)或者多層服務(wù)
故障,從而導(dǎo)致整個(gè)系統(tǒng)故障。這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)。
SpringCloud 中的 Hystrix 組件就可以解決此類問(wèn)題,Hystrix 負(fù)責(zé)監(jiān)控服務(wù)之間的調(diào)用情況,連續(xù)多次失敗的
情況進(jìn)行熔斷保護(hù)。保護(hù)的方法就是使用 Fallback,當(dāng)調(diào)用的服務(wù)出現(xiàn)故障時(shí),就可以使用 Fallback 方法的
返回值;Hystrix 間隔時(shí)間會(huì)再次檢查故障的服務(wù),如果故障服務(wù)恢復(fù),將繼續(xù)使用服務(wù)。
源碼
GitHub地址:https://github.com/intomylife/SpringCloud
環(huán)境
JDK 1.8.0 +
Maven 3.0 +
SpringBoot 2.0.3
SpringCloud Finchley.RELEASE
開(kāi)發(fā)工具
IntelliJ IDEA
正文
commons 工程
commons 工程 - POM 文件
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.zwc
springcloud-hystrix-commons
1.0
springcloud-hystrix-commons
公用工程
jar
UTF-8
1.8
Cairo-SR3
Finchley.RELEASE
io.spring.platform
platform-bom
${platform-bom.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud-dependencies.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
配置一些共用依賴
commons 工程 - 項(xiàng)目結(jié)構(gòu)
service 工程
① 此工程下有四個(gè)模塊:一個(gè)注冊(cè)中心以及服務(wù) A、B、C
② A 提供服務(wù)并且調(diào)用服務(wù) B、B 提供服務(wù)并且調(diào)用服務(wù) C 以及 C 提供服務(wù)
registry-service(注冊(cè)中心)
registry-service - POM 文件
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.zwc
springcloud-hystrix-service
1.0
com.zwc
springcloud-hystrix-registry-service
1.0
springcloud-hystrix-registry-service
注冊(cè)中心
jar
com.zwc
springcloud-hystrix-commons
1.0
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-maven-plugin
主要是加入 spring-cloud-starter-netflix-eureka-server 依賴
registry-service - application.yml 配置文件
# 端口
server:
port: 8761
# 應(yīng)用名稱
spring:
application:
name: eurka-server
eureka:
instance:
# 使用 ip 代替實(shí)例名
prefer-ip-address: true
# 實(shí)例的主機(jī)名
hostname: ${spring.cloud.client.ip-address}
# 實(shí)例的 ID 規(guī)則
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
client:
# 是否向注冊(cè)中心注冊(cè)自己
registerWithEureka: false
# 是否向注冊(cè)中心獲取注冊(cè)信息
fetchRegistry: false
serviceUrl:
# 注冊(cè)中心地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
這里使用了默認(rèn)的 8761 端口,當(dāng)然也可以更改,不過(guò)在發(fā)現(xiàn)調(diào)用服務(wù)端的注冊(cè)中心地址端口要與它一致
registry-service - 啟動(dòng)類
package com.zwc;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class SpringcloudHystrixRegistryServiceApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudHystrixRegistryServiceApplication.class, args);
}
}
在啟動(dòng)類中添加 @EnableEurekaServer 注解表示此工程是注冊(cè)中心
registry-service - 啟動(dòng)項(xiàng)目
1. 項(xiàng)目啟動(dòng)成功后訪問(wèn) http://localhost:8761/ 即可看到 eureka-server 主頁(yè)面
服務(wù)工程 A(提供者和消費(fèi)者)
服務(wù)工程 A - POM 文件
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.zwc
springcloud-hystrix-a-service
1.0
com.zwc
springcloud-hystrix-a-service-core
1.0
springcloud-hystrix-a-service-core
服務(wù)工程 - A 核心
jar
com.zwc
springcloud-hystrix-commons
1.0
com.zwc
springcloud-hystrix-a-service-api
1.0
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.boot
spring-boot-maven-plugin
加入 spring-cloud-starter-netflix-eureka-client 依賴
還需要加入 Feign 的起步依賴 spring-cloud-starter-openfeign
服務(wù)工程 A - application.yml 配置文件
# 端口無(wú)錫看婦科哪里好 http://www.xasgfk.cn/
server:
port: 8090
# 應(yīng)用名稱
spring:
application:
name: hystrix-a
eureka:
instance:
# 使用 ip 代替實(shí)例名
prefer-ip-address: true
# 實(shí)例的主機(jī)名
hostname: ${spring.cloud.client.ip-address}
# 實(shí)例的 ID 規(guī)則
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
client:
serviceUrl:
# 注冊(cè)中心地址
defaultZone: http://${eureka.instance.hostname}:8761/eureka/
注意此處配置注冊(cè)中心地址的端口為 8761 也就是上面注冊(cè)中心工程配置的端口
spring.application.name:應(yīng)用名稱,被消費(fèi)者調(diào)用時(shí)需要用到,它在消費(fèi)的同時(shí)也可以被消費(fèi)
這里除注冊(cè)中心工程以外的三個(gè)工程都與此配置相似,不一樣的地方就是端口和應(yīng)用名稱,不再贅述
服務(wù)工程 A - application.properties(注意)
# 開(kāi)啟斷路器
feign.hystrix.enabled=true
斷路器要主動(dòng)開(kāi)啟,服務(wù)調(diào)用失敗時(shí)才會(huì)熔斷
此處有一個(gè)坑,把此配置寫(xiě)到 application.yml 中熔斷不會(huì)生效
A 和 B 工程都有此配置,此次搭建中 C 工程只提供服務(wù),沒(méi)有消費(fèi)服務(wù)。所以 C 工程不用該配置
application.properties 和 bootstrap.yml 二選一就行
服務(wù)工程 A - bootstrap.yml(注意)
feign:
hystrix: