Spring Cloud系列之閘道器 Zuul

2021-10-25 08:50:36 字數 3735 閱讀 1986

pom.xml:

<?xml version="1.0" encoding="utf-8"?>

cloud-demo

cn.hao.learning

1.0-snapshot

4.0.0

gateway

org.springframework.cloud

spring-cloud-starter-netflix-zuul

com.fasterxml.jackson.core

jackson-databind

2.8.9

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

org.apache.commons

commons-lang3

3.8.1

import org.springframework.cloud.netflix.zuul.enablezuulproxy;

/** * @author: hao

* @description: 閘道器

* @date: 2020/2/27 20:43

* @version: 1.0

*/@enablezuulproxy

public static void main(string args) }

zuul中的配置可參考: org.springframework.cloud.netflix.zuul.filters.zuulproperties

server:

port: 10010

spring:

name: gateway # 應用名稱,會在eureka中顯示

eureka:

client:

eureka.client.fetch-registry: true # 當服務消費者啟動是,會檢測eureka.client.fetch-registry引數的值,如果為true,則會從eureka server服務的列表唯讀備份,然後快取在本地,並且預設每隔30秒會重新獲取並更新資料

registry-fetch-interval-seconds: 5 # 每隔5秒會重新獲取並更新eureka server服務的列表

register-with-eureka: true # 是否註冊自己的資訊到eurekaserver,預設是true

fetch-registry: true # 是否拉取其它服務的資訊,預設是true

service-url: # eurekaserver的位址,現在是自己的位址,如果是集群,需要加上其它server的位址。

defaultzone:

instance:

prefer-ip-address: true # 當呼叫gethostname獲取例項的hostname時,返回ip而不是host名稱

ip-address: 127.0.0.1 # 指定自己的ip資訊,不指定的話會自己尋找

假設有乙個使用者服務:訪問id為6的使用者。

不配置zuul,預設zuul會自動從eureka中拉取所有服務列表,閘道器ip、port後的匹配字首為serviceid。如serviceid為user-service,訪問閘道器位址跳轉訪問

如下配置:

zuul:

routes:

user-service: #routes的自定義id,不重複的話寫什麼都可以,規範上和serviceid保持一致

path: /my-user-service/**

serviceid: user-service

可以新增也能跳轉訪問

上面對應的簡寫為:

zuul:

routes:

user-service: /my-user-service/**

格式:serviceid: 字首對映路徑

zuul:

routes:

user-service:

path: /user/**

serviceid: user-service

strip-prefix: false

strip-prefix: true

ignored-services:

- consumer-service

prefix: /api

strip-prefix表示匹配路徑是否保留,可以全域性配置,可以區域性配置。預設true,匹配路徑保留。

ignored-services表示忽略進行閘道器跳轉的服務,格式為:- serviceid

prefix可配置全域性的字首,即跳轉到各服務的共同字首。

當前跳轉訪問。如果區域性配置的那個strip-prefix為true,跳轉訪問

zuulfilter是過濾器的頂級父類。其中定義的4個最重要的方法:

public abstract zuulfilter implements izuulfilter
filterorder:通過返回的int值來定義過濾器的執行順序,數字越小優先順序越高。

異常流程:

使用場景舉例:

自定義過濾器:

@component

public class loginfilter extends zuulfilter

@override

public int filterorder()

@override

public boolean shouldfilter()

@override

public object run() throws zuulexception

// 校驗通過,可以考慮把使用者資訊放入上下文,繼續向後執行

return null;}}

zuul中預設就已經整合了ribbon負載均衡和hystrix熔斷機制。但是所有的超時策略都是走的預設值,比如熔斷超時時間只有1s,很容易就觸發了。

zuul:

retryable: true

ribbon:

connecttimeout: 250 # 連線超時時間(ms)

readtimeout: 2000 # 通訊超時時間(ms)

oktoretryonalloperations: true # 是否對所有操作重試

maxautoretriesnextserver: 2 # 同一服務不同例項的重試次數

maxautoretries: 1 # 同一例項的重試次數

hystrix:

command:

default:

execution:

isolation:

thread:

timeoutinmillisecond: 6000 # 熔斷超時時長:6000ms

Springcloud之Gateway閘道器

官網 匯入依賴 org.springframework.cloud spring cloud starter gateway org.springframework.cloud spring cloud starter netflix eureka client gateway不能匯入spring ...

Springcloud學習系列之Zuul的使用

zuul的作用是服務閘道器,使用者的請求先通過zuul,由zuul 至各服務。由此,zuul可以做很多任務作,如校驗,鑑權等。需要zuul註冊進eureka註冊中心 org.springframework.cloudgroupid spring cloud starter netflix zuula...

Springcloud 系列之feign負載均衡

feign是宣告性的web服務客戶端。它使編寫web服務客戶端更加容易。要使用feign,請建立乙個介面並對其進行注釋。它具有可插入的注釋支援,包括feign注釋和jax rs注釋。feign還支援可插拔編碼器和解碼器。spring cloud新增了對spring mvc注釋的支援,並支援使用spr...