欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Cloud詳細講解zuul集成Eureka流程

 更新時間:2022年06月23日 10:08:10   作者:桃花鍵神  
這篇文章主要介紹了Spring?Cloud?zuul集成Eureka,Eureka?Client中內置一個負載均衡器,用來進行基本的負載均衡,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

zuul集成Eureka

通過剛才的示例,我們已經(jīng)可以簡單地使用 Zuul 進行路由的轉發(fā)了,在實際使用中我們通常是用 Zuul 來代理請求轉發(fā)到內部的服務上去,統(tǒng)一為外部提供服務。內部服務的數(shù)量會很多,而且可以隨時擴展,我們不可能每增加一個服務就改一次路由的配置,所以也得通過結合 Eureka 來實現(xiàn)動態(tài)的路由轉發(fā)功能。首先需要添加 Eureka 的依賴,代碼如下所示。

<dependency>
 <groupId>org.springframework.cloud</groupId > 
 <artifactId>spring-cloud- starter-netflix-eureka-client</artifactId> 
 <version>2.2.9.RELEASE</version> 
 </dependency>

說明:這里的eureka-client版本要使用2.2.9.RELEASE,否則會報錯!

啟動類不需要修改,因為 @EnableZuulProxy 已經(jīng)自帶了 @EnableDiscoveryClient。只需要在配置文件中增加Eureka 的地址即可:

eureka:
 client:
  service-url:
   defaultZone: http://admin:1357@localhost:8761/eureka

重啟服務,我們可以通過默認的轉發(fā)規(guī)則來訪問 Eureka中的服務。訪問規(guī)則是“網(wǎng)關服務地址+訪問的服務名稱+接口 URI”。

如上面的訪問改為: http://localhost:7000/ws-user-server/user/23

Zuul路由配置

當 Zuul 集成 Eureka 之后,其實就可以為 Eureka 中所有的服務進行路由操作了,默認的轉發(fā)規(guī)則就是“網(wǎng)關 服務地址+訪問的服務名稱+接口 URI”。在給服務指定名稱的時候,應盡量短一點,這樣的話我們就可以用默認的路由規(guī)則進行請求,不需要為每個服務都定一個路由規(guī)則,這樣就算新增了服務,API 網(wǎng)關也不用修改和重啟了。

1. 指定具體服務路由

我們可以為每一個服務都配置一個路由轉發(fā)規(guī)則:

zuul:
 routes: #路由轉發(fā)
  ws-user-server:
   path: /api-user/**

上述代碼將ws-user-server 服務的路由地址配置成了api-user,也就是當需要訪問 ws-user-server中的接口時,我們可以通過 api-user/user/20 來進行。這其實就是將服務名稱變成了我們自定義的名稱。注意: /api-user/** 后面一定要配置兩個星號,兩個星號表示可以轉發(fā)任意層級的 URL,比如“/apiuser/user/1”。如果只配置一個星號,那么就只能轉發(fā)一級,比如“/api-user/user”。默認的路由規(guī)則還適用?。。?!

2. 路由前綴

有的時候我們會想在 API 前面配置一個統(tǒng)一的前綴,就可

以通過 Zuul 中的配置來實現(xiàn):

zuul:
 prefix: /v1

上述訪問地址變?yōu)椋?http://localhost:7000/v1/api-user/user/20

Zuul過濾器

過濾器類型

Zuul 中的過濾器跟我們之前使用的 javax.servlet.Filter不一樣,javax.servlet.Filter 只有一種類型,可以通過配置 urlPatterns 來攔截對應的請求。

而 Zuul 中的過濾器總共有 4 種類型,且每種類型都有對應的使用場景。

1)pre

可以在請求被路由之前調用。適用于身份認證的場景,認證通過后再繼續(xù)執(zhí)行下面的流程。

2)route

在路由請求時被調用。適用于灰度發(fā)布場景,在將要路由的時候可以做一些自定義的邏輯。

3)post

在 route 和 error 過濾器之后被調用。這種過濾器將請求路由到達具體的服務之后執(zhí)行。適用于需要添加響應頭,記錄響應日志等應用場景。

4)error

處理請求時發(fā)生錯誤時被調用。在執(zhí)行過程中發(fā)送錯誤時會進入 error 過濾器,可以用來統(tǒng)一記錄錯誤信息。

請求生命周期

過濾器執(zhí)行的順序,請求發(fā)過來首先到 pre 過濾器,再到 routing 過濾器,最后到 post 過濾器,任何一個過濾器有異常都會進入 error 過濾器。通過 com.netflix.zuul.http.ZuulServlet 也可以看出完整執(zhí)行順序,ZuulServlet 類似 Spring-MVC 的DispatcherServlet,所有的 Request 都要經(jīng)過ZuulServlet 的處理。

ZuulServlet 的service實現(xiàn):

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { try { 
this.init((HttpServletRequest)servletReque st(HttpServletResponse)servletResponse); RequestContext context = RequestContext.getCurrentContext(); context.setZuulEngineRan(); try {this.preRoute(); } catch (ZuulException var13) { this.error(var13); this.postRoute(); return; }try {this.route(); } catch (ZuulException var12) { this.error(var12); this.postRoute(); return; }try {this.postRoute();} catch (ZuulException var11) { this.error(var11); } } catch (Throwable var14) { this.error(new ZuulException(var14, 500, "UNHANDLED_EXCEPTION_" + var14.getClass().getName())); } finally { RequestContext.getCurrentContext().unset() ; } }

使用過濾器

創(chuàng)建一個token驗證的過濾器,繼承抽象類ZuulFilter,

如下:

import com.netflix.zuul.ZuulFilter; 
import com.netflix.zuul.context.RequestContext; 
import com.netflix.zuul.exception.ZuulException; 
public class TokenFilter extends ZuulFilter {
/*** 過濾器類型,可選值有 pre、route、post、 error。* @return */ @Override 
public String filterType() { 
return "pre"; }
/*** 過濾器的執(zhí)行順序,數(shù)值越小,優(yōu)先級越高。 * @return */ @Override 
public int filterOrder() {
 return 0; }
 /*** 是否執(zhí)行該過濾器,true 為執(zhí)行,false 為不 執(zhí)行,這個也可以利用配置中心來實現(xiàn),達到動態(tài)的開啟和 關閉過濾器。 * @return */ @Override 
 public boolean shouldFilter() { 
 return true; }/*** 執(zhí)行自己的業(yè)務邏輯,判斷是否 * @return * @throws ZuulException */ @Override 
 public Object run() throws ZuulException {
  RequestContext requestContext=RequestContext.getCurrentCo ntext();String token= requestContext.getRequest().getHeader("tok en"); 
  //如果token沒傳或 失效 if(null==token){ requestContext.setSendZuulResponse(false); //告訴 Zuul 不需要將當前請求轉發(fā)到后端的服務了 requestContext.setResponseBody(" {code:0,msg:'返回給客戶端的數(shù)據(jù)'}"); requestContext.getResponse().setContentTyp e("application/json; charset=utf-8"); }return null; } }

使過濾器生效:

@Configuration 
public class FilterConfig { 
@Bean
 public TokenFilter tokenFilter(){
  return new TokenFilter(); 
  }
   }

到此這篇關于Spring Cloud詳細講解zuul集成Eureka流程的文章就介紹到這了,更多相關Spring Cloud Eureka內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Java中LinkedHashMap

    詳解Java中LinkedHashMap

    本文主要介紹了Java中LinkedHashMap的相關知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • MyBatis存儲過程、MyBatis分頁、MyBatis一對多增刪改查操作

    MyBatis存儲過程、MyBatis分頁、MyBatis一對多增刪改查操作

    本文通過一段代碼給大家介紹了MyBatis存儲過程、MyBatis分頁、MyBatis一對多增刪改查操作,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-11-11
  • Java如何在List或Map遍歷過程中刪除元素

    Java如何在List或Map遍歷過程中刪除元素

    相信大家在日常的開發(fā)過程中,經(jīng)常需要對List或Map里面的符合某種業(yè)務的數(shù)據(jù)進行刪除,但是如果不了解里面的機制就容易掉入“陷阱”導致遺漏或者程序異常。下面這篇文章將會給大家詳細介紹Java如何在List和Map遍歷過程中刪除元素,有需要的朋友們可以參考借鑒。
    2016-12-12
  • Java 信息摘要加密MD2、MD4、MD5實現(xiàn)詳解

    Java 信息摘要加密MD2、MD4、MD5實現(xiàn)詳解

    這篇文章主要介紹了Java 信息摘要加密MD2、MD4、MD5實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • java中for和forEach的速度比較實例Demo

    java中for和forEach的速度比較實例Demo

    for循環(huán)中的循環(huán)條件中的變量只求一次值,而foreach語句是java5新增,在遍歷數(shù)組、集合的時候,foreach擁有不錯的性能,這篇文章主要給大家介紹了關于java中for和forEach速度比較的相關資料,需要的朋友可以參考下
    2021-08-08
  • SpringBoot整合Vue實現(xiàn)微信掃碼支付以及微信退款功能詳解

    SpringBoot整合Vue實現(xiàn)微信掃碼支付以及微信退款功能詳解

    最近公司要在微信公眾號上做一個活動預報名,活動的門票等需要在微信中支付,下面這篇文章主要給大家介紹了關于SpringBoot整合Vue實現(xiàn)微信掃碼支付以及微信退款功能的相關資料,需要的朋友可以參考下
    2022-05-05
  • Java正則表達式處理特殊字符轉義的方法

    Java正則表達式處理特殊字符轉義的方法

    由于正則表達式定了一些特殊字符,而有時候需要對這些特殊字符進行匹配的話就需要進行轉義了,下面這篇文章主要給大家介紹了Java正則表達式處理特殊字符轉義的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • java 使用idea將工程打成jar并創(chuàng)建成exe文件類型執(zhí)行的方法詳解

    java 使用idea將工程打成jar并創(chuàng)建成exe文件類型執(zhí)行的方法詳解

    這篇文章主要介紹了java 使用idea將工程打成jar并創(chuàng)建成exe文件類型執(zhí)行,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-09-09
  • java普通項目讀取不到resources目錄下資源文件的解決辦法

    java普通項目讀取不到resources目錄下資源文件的解決辦法

    這篇文章主要給大家介紹了關于java普通項目讀取不到resources目錄下資源文件的解決辦法,Web項目中應該經(jīng)常有這樣的需求,在maven項目的resources目錄下放一些文件,比如一些配置文件,資源文件等,需要的朋友可以參考下
    2023-09-09
  • Java 實現(xiàn)圖片壓縮的兩種方法

    Java 實現(xiàn)圖片壓縮的兩種方法

    這篇文章主要介紹了Java 實現(xiàn)圖片壓縮的兩種方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-09-09

最新評論