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...