日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringCloud-使用路由网关统一访问接口(附代码下载)

發布時間:2025/3/19 javascript 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringCloud-使用路由网关统一访问接口(附代码下载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

SpringCloud-使用熔斷器儀表盤監控熔斷:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102673599

SpringCloud -創建統一的依賴管理:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102530574

上面在實現了使用熔斷儀表盤進行監控熔斷后,使用路由網關統一訪問接口。

API網關

API網關負責請求路由、組合和協議轉發。所有的客戶端請求首先要通過API網關,之后請求被路由到適當的服務。

API網關通常會調用多個微服務和聚合結果來處理一個請求。它可以在Web協議(如HTTP和WebSocket)和利用于內部的非Web友好協議之間進行轉換。

負載均衡方式

在Spring Cloud微服務系統中,一種常見的負載均衡方式是:客戶端的請求先經過負載均衡(Zuul、Nginx),再到達服務網關(Zuul集群),然后再到具體的服務。服務統一注冊到高可用的服務注冊中心集群,服務的所有的配置文件放在Git倉庫,方便開發人員隨時改配置。

Zuul簡介

Zuul的主要功能是路由轉發和過濾器。路由功能是微服務的一部分。

Zuul默認和Ribbon結合實現了負載均衡的功能。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。

實現

參考上面構建項目的方式,依次建立目錄hello-spring-cloud-zuul目錄以及在

目錄下新建pom.xml,并將其托管。然后新建src/main/java目錄和src/main/resources目錄并分別進行目錄設置。

然后在java下新建包,包下新建啟動類,在resources下新建配置文件application.yml。

完成后的目錄為:

?

pom.xml代碼

<?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><parent><groupId>com.badao</groupId><artifactId>hello-spring-cloud-dependencies</artifactId><version>1.0.0-SNAPSHOT</version><relativePath>../hello-spring-cloud-dependencies/pom.xml</relativePath></parent><artifactId>hello-spring-cloud-zuul</artifactId><packaging>jar</packaging><name>hello-spring-cloud-zuul</name><url>https://blog.csdn.net/badao_liumang_qizhi</url><inceptionYear>2019-Now</inceptionYear><dependencies><!-- Spring Boot Begin --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Spring Boot End --><!-- Spring Cloud Begin --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId></dependency><!-- Spring Cloud End --></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.badao.hello.spring.cloud.zuul.ZuulApplication</mainClass></configuration></plugin></plugins></build> </project>

配置文件application.yml代碼

spring:application:name: hello-spring-cloud-zuulserver:port: 8769eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/zuul:routes:api-a:path: /api/a/**serviceId: hello-spring-cloud-web-admin-ribbonapi-b:path: /api/b/**serviceId: hello-spring-cloud-web-admin-feign

注:

以 /api/a 開頭的請求都轉發給 hello-spring-cloud-web-admin-ribbon 服務
以 /api/b 開頭的請求都轉發給 hello-spring-cloud-web-admin-feign 服務

其中routes是固定的,但是api-a與api-b是自己定義的。

在自定義的路由中,path代表請求的路徑,serviceId代表真正映射的服務的Id。

在path中**代表通配符,即以/api/a開頭的都會請求同組內的serviceId所對應的服務。

?

然后在包下新建com.badao.hello.spring.cloud.zuul包,并在包下新建ZuulApplication啟動類

package com.badao.hello.spring.cloud.zuul;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication @EnableEurekaClient @EnableZuulProxy public class ZuulApplication {public static void main(String[] args) {SpringApplication.run(ZuulApplication.class, args);} }

至此整個服務體系的結構如下

?

效果

我們依次啟動Eureka服務、服務提供者、兩個服務消費者、zuul的Application啟動類

?

然后打開瀏覽器,輸入:

http://localhost:8761/

打開Eureka的服務與注冊發現中心,發現全部被注冊并發現

?

然后再打開瀏覽器輸入:

http://localhost:8769/api/a/hi?message=HelloZuulFromBadao

?

再打開瀏覽器輸入:

http://localhost:8769/api/b/hi?message=HelloZuulFromBadao

?

則Zuul的路由配置功能配置成功。

配置網關路由失敗時的回調

有時如果因為網絡、內存等原因導致網關路由失敗,則需要配置失敗時的回調。

再新建fallback包,包下新建WebAdminFeignFallbackProvider

package com.badao.hello.spring.cloud.zuul.fallback;import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider; 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; import java.util.HashMap; import java.util.Map; @Component public class WebAdminFeignFallbackProvider implements FallbackProvider {@Overridepublic String getRoute() {// ServiceId,如果需要所有調用都支持回退,則 return "*" 或 return nullreturn "hello-spring-cloud-web-admin-feign";}/*** 如果請求服務失敗,則返回指定的信息給調用者* @param route* @param cause* @return*/@Overridepublic ClientHttpResponse fallbackResponse(String route, Throwable cause) {return new ClientHttpResponse() {/*** 網關向 api 服務請求失敗了,但是消費者客戶端向網關發起的請求是成功的,* 不應該把 api 的 404,500 等問題拋給客戶端* 網關和 api 服務集群對于客戶端來說是黑盒* @return* @throws IOException*/@Overridepublic HttpStatus getStatusCode() throws IOException {return HttpStatus.OK;}@Overridepublic int getRawStatusCode() throws IOException {return HttpStatus.OK.value();}@Overridepublic String getStatusText() throws IOException {return HttpStatus.OK.getReasonPhrase();}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {ObjectMapper objectMapper = new ObjectMapper();Map<String, Object> map = new HashMap<>();map.put("status", 200);map.put("message", "無法連接,請檢查您的網絡");return new ByteArrayInputStream(objectMapper.writeValueAsString(map).getBytes("UTF-8"));}@Overridepublic HttpHeaders getHeaders() {HttpHeaders headers = new HttpHeaders();// 和 getBody 中的內容編碼一致headers.setContentType(MediaType.APPLICATION_JSON_UTF8);return headers;}};} }

代碼下載

https://download.csdn.net/download/badao_liumang_qizhi/11908425

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的SpringCloud-使用路由网关统一访问接口(附代码下载)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。