Springcloud服務閘道器之Zuul

2021-10-05 01:18:00 字數 2672 閱讀 5804

springcloud目前的服務閘道器有zuul和springcloud getway。zuul是netflix公司公司開源專案。在微服務架構中,後端服務往往不直接開放給呼叫端,而是通過乙個api閘道器根據請求的url,路由到相應的服務。當新增api閘道器後,在第三方呼叫端和服務提供方之間就建立了一面牆,這面牆直接與呼叫方通訊進行許可權控制,後將請求均衡分發給後台服務端。

zuul的一些作用:

新建乙個springboot專案。

1.依賴

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

org.springframework.cloud

spring-cloud-starter-netflix-zuul

2.啟動類新增註解

@enablezuulproxy //開啟閘道器**

public static void main(string args) }

3.配置檔案

spring:

name: zuul

server:

port: 2020

eureka:

client:

service-url:

defaultzone: http://localhost:1111/eureka

4.啟動測試

啟動zuul、eureka-server、eureka-provider。訪問http://localhost:2020/eureka-provider/hello,可以看到對應訊息。說明zuul成功呼叫了eureka-provider,通過zuul**給對應的服務(eureka-provider)進行處理。

1.配置檔案

zuul:

routes:

pikachues:

path: /pikachues/**

service-id: eureka-provider

滿足/pikachues/**匹配的請求,將**到eureka-provider例項處理。

zuul:

routes:

eureka-provider: /pikachues/**

2.重新啟動zuul

這時你會發現通過http://localhost:2020/eureka-provider/hello和http://localhost:2020/pikachues/hello都可以成功呼叫。

3.原真實服務名忽略

即讓呼叫只可以通過zuul配置的規則訪問,不可以通過原來的服務名訪問。

zuul:

routes:

pikachues:

path: /pikachues/**

service-id: eureka-provider

# ignored-services: eureka-provider

ignored-services: "*"

如果是忽略某乙個ignored-services中填具體名稱,忽略多個用*。這時候重新啟動啟動zuul專案,你會發現只能通過http://localhost:2020/pikachues/hello呼叫,另外乙個呼叫失敗。

4.設定統一公共字首

zuul:

routes:

pikachues:

path: /pikachues/**

service-id: eureka-provider

# ignored-services: eureka-provider

ignored-services: "*"

prefix: /dpf

這時候重新啟動訪問:http://localhost:2020/dpf/pikachues/hello

對於來自客戶端的請求,可以在zuul中進行預處理,例如許可權判斷等。

1.定義乙個簡單的許可權過濾器

public class permissionfilter extends zuulfilter 

/*** 過濾器優先順序

* @return

*/@override

public int filterorder()

/*** 是否過濾

* @return

*/@override

public boolean shouldfilter()

/*** 核心的過濾邏輯寫在這裡

* @return 這個方法雖然有返回值,但是這個返回值目前沒什麼用

* @throws zuulexception

*/@override

public object run() throws zuulexception

return null;

}}

2.重新啟動zuul

這時候傳送請求必須帶上username和password兩個引數,否則不能通過。

測試:http://localhost:2020/pikachues/hello?username=pikachues&password=123

github

SpringCloud 服務閘道器

上篇部落格 springcloud eureka服務註冊和發現 中介紹了註冊中心eureka 服務提供者和服務消費者。這篇部落格我們將介紹服務閘道器。圖 1 未使用服務閘道器的做法 圖 2 服務閘道器的做法 服務閘道器,英文service gateway,他是微服務框架中唯一的入口。有些類似外觀模式...

SpringCloud 服務閘道器

上篇部落格 springcloud eureka服務註冊和發現 中介紹了註冊中心eureka 服務提供者和服務消費者。這篇部落格我們將介紹服務閘道器。圖 1 未使用服務閘道器的做法 圖 2 服務閘道器的做法 服務閘道器,英文service gateway,他是微服務框架中唯一的入口。有些類似外觀模式...

SpringCloud 服務閘道器

是程式或者系統之間的連線節點,扮演著程式或系統之間的門戶,允許它們之間通過通訊協議交換資訊,它們可能是同構和異構的異同。比如新增依賴 org.springframework.cloudgroupid spring cloud starter zuulartifactid dependency org...