java B2B2C源码电子商务平台 - Zuul回退机制
1、在一些不穩定因素導致路由后面的微服務宕機或者無響應時,zuul 就會累計大量的請求,久而久之基本上所有的請求都會超時,但是請求鏈接數卻不斷的在增加,不斷的占用資源池不能結束知道超時消耗殆盡導致zuul微服務死機,整體掛機消亡;需要了解電子商務平臺源碼可加企鵝邱邱 一零三八七七四六二六
2、而 zuul 在這種情況下,提供一種很好的回退機制,針對大量請求時提供了友好的熔斷機制,確保在路由微服務修復前,盡量將過多的請求快速響應返回,減輕zuul的壓力;
3、在本章節,我們對上面發生的這種普遍現象做了一種簡單的回退處理,有效降低微服務的壓力,還可以友好的提示給前端用戶,或者調用方;
二、實現步驟
2.1 添加 maven 引用包
<?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><artifactId>springms-gateway-zuul-fallback</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><parent><groupId>com.springms.cloud</groupId><artifactId>springms-spring-cloud</artifactId><version>1.0-SNAPSHOT</version></parent><dependencies><!-- API網關模塊 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zuul</artifactId></dependency><!-- 客戶端發現模塊,由于文檔說 Zuul 的依賴里面不包括 eureka 客戶端發現模塊,所以這里還得單獨添加進來 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency></dependencies></project>復制代碼2.2 添加應用配置文件
spring:application:name: springms-gateway-zuul-fallback server:port: 8200 eureka:datacenter: SpringCloud # 修改 http://localhost:8761 地址 Eureka 首頁上面 System Status 的 Data center 顯示信息environment: Test # 修改 http://localhost:8761 地址 Eureka 首頁上面 System Status 的 Environment 顯示信息client:service-url:defaultZone: http://admin:admin@localhost:8761/eurekahealthcheck: # 健康檢查enabled: trueinstance:prefer-ip-address: trueinstance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}zuul:ignoredServices: springms-consumer-movie-ribbon-with-hystrixroutes:springms-provider-user: /user/**# 打印日志 logging:level:root: INFOcom.springms: DEBUGribbon:ConnectTimeout: 3000ReadTimeout: 60000 復制代碼2.3 添加zuul回退處理類
package com.springms.cloud.fallback;import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpResponse; import org.springframework.stereotype.Component;import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream;@Component public class CustomZuulFallbackHandler implements ZuulFallbackProvider {@Overridepublic String getRoute() {return "springms-provider-user";}@Overridepublic ClientHttpResponse fallbackResponse() {return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {return HttpStatus.BAD_REQUEST;}@Overridepublic int getRawStatusCode() throws IOException {return HttpStatus.BAD_REQUEST.value();}@Overridepublic String getStatusText() throws IOException {return HttpStatus.BAD_REQUEST.getReasonPhrase();}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {return new ByteArrayInputStream((getRoute() + " fallback").getBytes());}@Overridepublic HttpHeaders getHeaders() {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);return headers;}};} } 復制代碼2.4 添加zuul服務網關微服務啟動類
package com.springms.cloud;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication @EnableZuulProxy public class MsGatewayZuulFallbackApplication {public static void main(String[] args) {SpringApplication.run(MsGatewayZuulFallbackApplication.class, args);System.out.println("GatewayZuulFallback微服務 已啟動.");} } 復制代碼三、測試
Zuul 路由后面的微服務掛了后,Zuul 提供了一種回退機制來應對熔斷處理:
1、編寫 application.yml 文件,添加應用程序的注解 EnableZuulProxy 配置;
2、啟動 springms-discovery-eureka 模塊服務,啟動1個端口;
3、啟動 springms-provider-user 模塊服務,啟動1個端口(application.yml 文件中的 appname 屬性不去掉的話,測試一是無法測試通過的);
4、啟動 springms-gateway-zuul-fallback 模塊服務,啟動1個端口;
5、新起網頁頁簽,輸入 http://localhost:7900/simple/3 正常情況下是能看到 ID != 0 一堆用戶信息被打印出來;
6、新起網頁頁簽,然后輸入 http://localhost:8200/springms-provider-user/simple/3,正常情況下是能看到 ID != 0 一堆用戶信息被打印出來;
7、這個時候,停止 springms-provider-user 模塊服務;
8、刷新 http://localhost:8200/springms-provider-user/simple/3 網頁,正常情況下會提示 “fallback” 字樣的字符串;
9、待用戶微服務被踢出后,刷新 http://localhost:8200/springms-provider-user/simple/3 網頁,正當情況下會提示 404 錯誤頁面,因為用戶微服務由于宕機超過大約90秒后會自動被 eureka 服務器剔除掉,所以訪問網頁必然找不到服務路徑;
總結:首先 Zuul 作為路由轉發微服務,其也提供了一種熔斷機制,避免大量請求阻塞在路由分發處;其次當注冊進入 eureka 服務治理發現框架后,一定時間后還沒有連上eureka時,這個時候eureka就會將這個宕機的微服務移除服務治理框架;java B2B2C源碼電子商務平臺
總結
以上是生活随笔為你收集整理的java B2B2C源码电子商务平台 - Zuul回退机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据分析更新
- 下一篇: [ JavaScript ] 数据结构与