一、服務端
- 添加依賴
<properties> <spring-cloud.version>Hoxton.SR3</spring-cloud.version> </properties> <!--服務端依賴--> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <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>
- application.properties文件配置
server.port=8761 #實例地址 eureka.instance.hostname=localhost eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port} #禁止自己作爲服務器 eureka.client.register-with-eureka=false #屏蔽註冊信息 eureka.client.fetch-registry=false #關閉自我保護 eureka.server.enable-self-preservation=false #關閉“沒有用於註冊服務器的副本節點”的警告信息 logging.level.com.netflix.eureka=off logging.level.com.netflix.discovery=off
- 啓動類加註解
@EnableEurekaServer
@SpringBootApplication //springCloud:註冊中心的服務端 @EnableEurekaServer public class Springcloud01Application { public static void main(String[] args) { SpringApplication.run(Springcloud01Application.class, args); } }
二、客戶端
- 添加依賴
<properties> <spring-cloud.version>Hoxton.SR3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.2.2.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <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>
- application.properties文件配置
server.port=8085 # redis數據庫配置 spring.redis.database=0 spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= spring.application.name=requestCityData-eureka-feign #Eureka客戶端配置 eureka.client.service-url.defaultZone=http://localhost:8761/eureka
- 啓動類加註解
@EnableEurekaClient
三、消費者調用提供者提供的數據
- 添加依賴
在消費者項目中加入依賴<!--feign 依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
- application.properties中添加配置
feign.client.config.feignName.connectTimeout=5000 feign.client.config.feignName.readTimeout=5000
- 啓動類加註解
@EnableFeignClients
- 自定義一個接口,不實現類
添加註解:@FeignClient("cityDataProvider-eureka")
,cityDataProvider-eureka
是提供者的客戶端名稱,如以下例子:
方法使用註解@RequestMapping("/city/getCity")
,調用提供者的controller層的路徑@FeignClient("cityDataProvider-eureka") public interface GetCityService { /** * 獲取城市信息 */ @RequestMapping("/city/getCity") public List<CityObj> getCity(); }
四、使用網關
把兩個提供者的數據集合到一起
-
新建一個spring項目,選擇相關依賴:
-
啓動類上 加上註解
@EnableZuulProxy
和@EnableEurekaClient
-
配置application.properties文件
server.port=8087 spring.application.name=eureka-client-zuul eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/ # 城市 列表 提供者 zuul.routes.city.path=/zuulCity/** zuul.routes.city.serviceId=cityDataProvider-eureka # 從redis數據庫取數據的 提供者 zuul.routes.myapi.path=/myApi/** zuul.routes.myapi.serviceId=weatherDataProvider-eureka
-
測試獲取數據
使用配置中的路徑獲取數據
例子:http://127.0.0.1:8087/zuulCity/cityData/cities -
修改顯示頁面的微服務
新建一個接口,把兩個提供者合二爲一/** * 使用 zuul 鏈接zuul */ @FeignClient(value = "eureka-client-zuul") public interface GetCityAndWeather { /** * 獲取城市信息 * @return */ @RequestMapping("/zuulCity/city/getCity") //路徑要和zull的路徑一致 public List<CityObj> getCitiesToZuul(); /** * 根據城市id獲取天氣信息 * 不是定時存入數據庫的 * @param cityId * @return */ @RequestMapping("/myApi/weather/cityId/{cityId}") WeatherResponse getWeatherByCityIdToZuul(@PathVariable("cityId")String cityId); }
-
修改controller層,然後測試
五、熔斷器
-
介紹
在微服務架構中多層服務之間會相互調用,如果其中有一層服務故障了,可能會導致一層服務或者多層服務故障,從而導致整個系統故障。這種現象被稱爲服務雪崩效應。SpringCloud 中的 Hystrix 組件就可以解決此類問題,Hystrix 負責監控服務之間的調用情況,連續多次失敗的情況進行熔斷保護。
保護的方法就是使用 Fallback,當調用的服務出現故障時,就可以使用 Fallback 方法的返回值;
Hystrix 間隔時間會再次檢查故障的服務,如果故障服務恢復,將繼續使用服務。
-
使用熔斷器
導入依賴:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
-
啓動類加註解:
@EnableCircuitBreaker
-
配置文件添加:
feign.hystrix.enabled=true
-
修改 feign 的調用接口
在@FeignClient
註解裏面添加內容:fallback = GetCityAndWeatherFallBack.class
,然後定義一個實現該接口的類GetCityAndWeatherFallBack
,在實現類中填充數據數據@FeignClient(value = "eureka-client-zuul",fallback = GetCityAndWeatherFallBack.class)
實現接口類:
public class GetCityAndWeatherFallBack implements GetCityAndWeather { @Override public List<CityObj> getCitiesToZuul() { /** * 可以在這裏 創建數據 */ return null; } @Override public WeatherResponse getWeatherByCityIdToZuul(String cityId) { return null; } }
-
把兩個提供者的微服務關閉,測試