1. 程式人生 > >系列5-springCloud微服務--zuul代理實現

系列5-springCloud微服務--zuul代理實現

1.zuul代理服務配置步驟1:新建zuul服務模組,修改pom檔案,新增如下依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
步驟2:修改zuul模組的application.yml檔案,新增對如下資訊,註冊到eureka,新增zuul的路徑配置。 ignored-services配置上服務名稱後,對應的服務將不能直接訪問。當服務名稱特別多的情況下,可以用"*"來派至所有的微服務都不能直接訪問,只能通過路由訪問。 配置routes,此處採用服務ID對應訪問路徑規則的方式進行配置,也是官方推薦的配置。
server: port: 8200eureka: client: service-url: defaultZone: http://ejava:[email protected]
:8000/eureka/
spring: application: name: springCloud-zuulzuul: ignored-services: "*" routes: springCloud-UltraService: /ultraService-proxy/**
可以採用的配置還有company.path: /ultraService-proxy/**company.serviceId: springCloud-UltraService其中的company是邏輯定義字串。只是為了讓path,和serviceId在邏輯上是一組。如果zuul不想通過eureka訪問後端的服務,則路由還可以如下配置:
company.path: /ultraService-proxy/**但是強烈不建議採用這種配置,因為所有服務的負載均衡處理將會非常麻煩,微服務的後端管理也會很麻煩。如果需要給所有的微服務訪問加上統一的字首,則可以新增如下配置zuul: prefix: ultrapower步驟3:建立啟動類,新增支援zuul的註解
@SpringBootApplication@EnableZuulProxypublic class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); }}
步驟4:啟動各個服務以及zuul模組,驗證是否可以通過zuul的代理訪問到資料:http://localhost:8200/ultraService-proxy/**2.zuul安全訪問設定(新增路由過濾器)步驟1:修改zuul模組的pom檔案,新增安全認證包依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</artifactId> </dependency>
步驟2:修改zuul模組,新增過濾器類AuthRequestFilter,繼承zuul的過濾器類ZuulFilter,重寫如下方法:
public class AuthRequestFilter extends ZuulFilter { @Override public Object run() { RequestContext context = RequestContext.getCurrentContext();//獲取當前請求上下文 String auth ="java:hello"; byte[] encodeAuth = Base64.getEncoder().encode(auth.getBytes(Charset.forName("US-ASCII"))); String header = new String(encodeAuth); context.addZuulRequestHeader("Authorization", header); return null; } @Override public boolean shouldFilter() { return true; } @Override public int filterOrder() { return 0; } @Override public String filterType() { return "pre"; }}
run方法中新增對於訪問後端加密後的服務進行安全認證操作。shouldFilter返回true標識啟用過濾器filterOrder標識過濾級別,返回的數量越大,級別越低。filterType在zuul進行過濾的時候,可以設定其顧慮執行的位置,:pre:請求發出之前進行過濾,如果要進行後臺服務訪問肯定要在請求之前設定頭資訊。route:在進行路由請求的時候被呼叫post:在路由之後傳送請求資訊的時候被呼叫error:出現錯誤之後被呼叫步驟3:修改zuul模組,建立一個路由配置類ZuulConfig,將自定義的過濾器進行注入。
@Configurationpublic class ZuulConfig { @Bean public AuthRequestFilter getAuthRequestFilter(){ return new AuthRequestFilter(); }}
步驟4:修改zuul模組的application.yml配置檔案,新增如下配置,則將路由設定為加密訪問:
security: basic: enabled: true user: name: zjava password: zhello
此時訪問路由的路徑上需要新增上認證資訊或者在請求頭中新增認證資訊才能通過安全認證進行請求訪問。3.zuul與feign的整合步驟1:修改feign的介面元件,將原來呼叫服務名稱改為呼叫路由的代理名稱:
@FeignClient(value="ultraService-proxy",configuration=FeignClientConfig.class,fallbackFactory=IDeptClientServiceFallBack.class)public interface IDeptClientService { @RequestMapping(method=RequestMethod.GET,value="/dept/sessionId") public String getSessionId(); @RequestMapping(method=RequestMethod.GET,value="/dept/user") public UserBean getUser();}
步驟2:修改feign介面服務配置類,修改安全認證賬號密碼為zuul的安全認證賬號:
@Configurationpublic class FeignClientConfig { @Bean public Level getLogger(){ return Logger.Level.FULL; } @Bean public BasicAuthRequestInterceptor getBasicAuthRequestInterceptor() { return new BasicAuthRequestInterceptor("zjava", "zhello"); }}
步驟3:可以將所有服務啟動並測試是否可以使用feign通過zuul進行呼叫後端服務。4.禁用自定義過濾器步驟1:只需要修改zuul元件的application.yml檔案新增如下配置即可:此時會提示沒有AuthRequestFilter屬性,可以忽略
zuul: AuthRequestFilter: pre: disable: true
5.zuul服務降級步驟1:在zuul中建立fallback回退類,作為服務降級處理類。注意@Component註解一定要新增上。
@Componentpublic class DeptServiceFallback implements ZuulFallbackProvider { @Override public ClientHttpResponse fallbackResponse() { return new ClientHttpResponse(){ @Override public InputStream getBody() throws IOException { //可以設定異常時返回的降級服務資訊 return new ByteArrayInputStream("【服務異常的主體內容資訊】".getBytes()); } @Override public HttpHeaders getHeaders() { HttpHeaders headers = new HttpHeaders(); headers.set("Content-Type","text/heml; charset=UTF-8"); return headers; } @Override public HttpStatus getStatusCode() throws IOException { return HttpStatus.BAD_REQUEST; } @Override public int getRawStatusCode() throws IOException { return HttpStatus.BAD_REQUEST.value(); } @Override public String getStatusText() throws IOException { return HttpStatus.BAD_REQUEST.getReasonPhrase(); } @Override public void close() { } }; } @Override public String getRoute() { //設定處理失敗的路由 return "ultraService-proxy"; }}
步驟6:啟動所有服務進行測試

相關推薦

系列5-springCloud服務--zuul代理實現

1.zuul代理服務配置步驟1:新建zuul服務模組,修改pom檔案,新增如下依賴:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId&g

SpringCloud服務筆記-Nginx實現閘道器反向代理

背景 當前在SpringCloud微服務架構下,閘道器作為服務的入口尤為重要,一旦閘道器發生單點故障會導致整個服務叢集癱瘓,為了保證閘道器的高可用可以通過Nginx的反向代理功能實現閘道器的高可用。 專案原始碼:https://github.com/taoweidong/Micro-service-learn

SpringCloud服務Zuul閘道器【真】動態路由

SpringCloud微服務Zuul閘道器動態路由 新的改變 功能快捷鍵 合理的建立標題,有助於目錄的生成 如何改變文字的樣式 插入連結與圖片 如何插入一段漂亮的程式碼片 生成一個適合你的列表 建立一個表

系列6-springCloud服務-config配置中心

config配置中心分為服務端和客戶端,服務端根據檔案儲存位置分為三種設定方式:git\githupSVN本地儲存其中git\githup,SVN的設定方式基本一樣。此處僅記錄git的設定,githup與git的設定完全一樣。1.config Server基於git步驟1:本

系列7-springCloud服務-服務匯流排Bus

1.服務端搭建步驟1:新建【springCloud-bus】修改pom檔案,新增如下內容:<dependency> <groupId>org.springframework.cloud</groupId> <artifactI

系列4-springCloud服務-Hystrix熔斷器

1.新增服務端的熔斷器步驟1:修改服務端pom檔案,新增對Hystrix元件的引用。<dependency> <groupId>org.springframework.cloud</groupId> <artifactId&g

springcloud服務系列——服務網關組件Zuul

extends version iter tput tar lte aps 新工程 err 前言 通過前幾篇教程的介紹,我們基本上認識了構建一個微服務系統所需要的組件,通過這些組件的結合,我們已經可以搭建一個較為簡略的微服務系統了,比如下面的架構圖: https://im

SpringCloud服務基礎5Zuul閘道器

       我們使用Spring Cloud Netflix中的Eureka實現了服務註冊中心以及服務註冊與發現;而服務間通過Ribbon或Feign實現服務的消費以及均衡負載;通過Spring Cloud Config實現了應用多環境的外部化配置以及

springcloud服務實戰:Eureka+Zuul+Ribbon+Hystrix+SpringConfig

app 支持 pro def ipa not color ins enable 原文地址:http://blog.csdn.net/yp090416/article/details/78017552 springcloud微服務實戰:Eureka+Zuul+Ribbon

從零開始,輕松搞定SpringCloud服務系列

markdown class net 配置中心 html div .html href .com 本系列博文目錄 【微服務】之一:從零開始,輕松搞定SpringCloud微服務系列–開山篇(spring boot 小demo) 【微服務】之二:從零開始,輕松搞定Spring

服務】之六:輕松搞定SpringCloud服務-API網關zuul

公司 create lan ice 子項目 專題 系統 如果 rose 通過前面幾篇文章的介紹,我們可以輕松搭建起來微服務體系中比較重要的幾個基礎構建服務。那麽,在本篇博文中,我們重點講解一下,如何將所有微服務的API同意對外暴露,這個就設計API網關的概念。 本系列教

springcloud服務系列服務註冊與發現組件Eureka

顯示 功能 depend mod 其他 瀏覽器 使用 空間 之間 一、Eurake的簡介二、使用Eureka進行服務的註冊消費1、創建一個服務註冊中心2、創建服務的提供者3、創建服務的消費者總結 一、Eurake的簡介 今天我們來介紹下springcloud的核心組件Eur

大型電商基於Springboot+Springcloud服務+Dubbo分散式,JVM虛擬機器,併發原理程式設計,實現服務架構

大型電商基於Springboot+Springcloud微服務+Dubbo分散式,JVM虛擬機器,併發原理程式設計,實現微服務架構39套Java架構師,高併發,高效能,高可用,分散式,叢集,電商,快取,微服務,微信支付寶支付,公眾號開發,java8新特性,P2P金融專案,程式設計,功能設計,資料庫設

服務springcloud服務閘道器、Zuul簡介和Zuul服務

使用zuul構建微服務閘道器 為什麼要使用微服務閘道器 雖然微服務架構已經初具雛形,但還有一些問題————不同的微服務 一般會有不同的網路地址,而外部客戶端(例如手機APP)可能還需 呼叫多個微服務接口才能完成一個業務需求。例如一個電影購票的 手機APP,可能會呼叫多個微服務介面,才

關於SpringCloud服務雲架構構建B2B2C電子商務平臺之-(五)路由閘道器(zuul)

在微服務架構中,需要幾個基礎的服務治理元件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智慧路由、配置管理等,由這幾個基礎元件相互協作,共同組建了一個簡單的微服務系統。一個簡答的微服務系統如下圖:   注意:A服務和B服務是可以相互呼叫的,作圖的時候忘記了。並且配置服務也是註冊到服

關於SpringCloud服務雲架構構建B2B2C電子商務平臺之-(五)路由網關(zuul)

href xmlns zoom col 研究 簡單 strip -c ins 在微服務架構中,需要幾個基礎的服務治理組件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智能路由、配置管理等,由這幾個基礎組件相互協作,共同組建了一個簡單的微服務系統。一個簡答的微服務系統如下

SpringCloud服務雲架構構建B2B2C電子商務平臺之-(五)路由閘道器(zuul)

在微服務架構中,需要幾個基礎的服務治理元件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智慧路由、配置管理等,由這幾個基礎元件相互協作,共同組建了一個簡單的微服務系統。一個簡答的微服務系統如下圖:   注意:A服務和B服務是可以相互呼叫的,作圖的時候忘記了。並且配置服務也是註冊到服

java複習筆記2--SpringCloud系列一:服務啟動原理探索

微服務架構的趨勢 隨著資料量的不斷增大,大資料時代的到來,網際網路技術的不斷髮展和變革,微服務架構和雲服務平臺以及大資料成為了時下最熱門的話題。現在,比較流行的微服務框架也有很多, 比如阿里的Dubbo,基於soringBoot的SpringCloud,Apac

java複習筆記3--SpringCloud系列一:服務啟動原理探之beanFactory載入

昨天,我們對SpringApplication的初始化以及SpringApplication.run方法中的部分程式碼進行了解讀和追蹤。這一塊的重點就是Spring的 SPI,META-INF/spring.factories檔案的格式以及載入機制。一定要花時間

java複習筆記3--SpringCloud系列一:服務啟動原理探索之beanFactory載入

昨天,我們對SpringApplication的初始化以及SpringApplication.run方法中的部分程式碼進行了解讀和追蹤。這一塊的重點就是Spring的 SPI,META-INF/spring.factories檔案的格式以及載入機制。一定要花時間