SpringCloud-Zuul網關實踐

1 zuul網關

1.1 新建工程

填寫基本信息:
在這裏插入圖片描述
添加Zuul依賴
在這裏插入圖片描述

1.2 編寫配置

server:
  port: 10010 #服務端口
spring:
  application:
    name: api-gateway #指定服務名

1.3 編寫引導類

通過@EnableZuulProxy註解開啓Zuul的功能:

@SpringBootApplication
@EnableZuulProxy // 開啓網關功能
public class ItcastZuulApplication {

    public static void main(String[] args) {
        SpringApplication.run(ItcastZuulApplication.class, args);
    }
}

1.4 編寫路由規則

我們需要用Zuul來代理service-provider服務,先看一下控制面板中的服務狀態:

在這裏插入圖片描述

  • ip爲:127.0.0.1
  • 端口爲:8081

映射規則:

server:
  port: 10010 #服務端口
spring:
  application:
    name: api-gateway #指定服務名
zuul:
  routes:
    service-provider: # 這裏是路由id,隨意寫
      path: /service-provider/** # 這裏是映射路徑
      url: http://127.0.0.1:8081 # 映射路徑對應的實際url地址

我們將符合path 規則的一切請求,都代理到 url參數指定的地址

本例中,我們將 /service-provider/**開頭的請求,代理到http://127.0.0.1:8081

1.5 啓動測試

訪問的路徑中需要加上配置規則的映射路徑,我們訪問:http://127.0.0.1:10010/service-provider/user/1
在這裏插入圖片描述

2. 面向服務的路由

在剛纔的路由規則中,我們把路徑對應的服務地址寫死了!如果同一服務有多個實例的話,這樣做顯然就不合理了。我們應該根據服務的名稱,去Eureka註冊中心查找 服務對應的所有實例列表,然後進行動態路由纔對!

對itcast-zuul工程修改優化:

2.1 添加Eureka客戶端依賴

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

2.2 添加Eureka配置,獲取服務信息

eureka:
  client:
    registry-fetch-interval-seconds: 5 # 獲取服務列表的週期:5s
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

2.3 開啓Eureka客戶端發現功能

@SpringBootApplication
@EnableZuulProxy // 開啓Zuul的網關功能
@EnableDiscoveryClient
public class ZuulDemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(ZuulDemoApplication.class, args);
	}
}

2.4 修改映射配置,通過服務名稱獲取

zuul:
  routes:
    service-provider: # 這裏是路由id,隨意寫
      path: /service-provider/** # 這裏是映射路徑
      serviceId: service-provider # 指定服務名稱

2.5 啓動測試

再次啓動,這次Zuul進行代理時,會利用Ribbon進行負載均衡訪問

3 簡化的路由配置

在剛纔的配置中,我們的規則是這樣的:

  • zuul.routes..path=/xxx/**: 來指定映射路徑。是自定義的路由名
  • zuul.routes..serviceId=service-provider:來指定服務名。

而大多數情況下,我們的路由名稱往往和服務名會寫成一樣的。因此Zuul就提供了一種簡化的配置語法:zuul.routes.=

比方說上面我們關於service-provider的配置可以簡化爲一條:

zuul:
  routes:
    service-provider: /service-provider/** # 這裏是映射路徑

省去了對服務名稱的配置。

4 默認的路由規則

在使用Zuul的過程中,上面講述的規則已經大大的簡化了配置項。但是當服務較多時,配置也是比較繁瑣的。因此Zuul就指定了默認的路由規則:

  • 默認情況下,一切服務的映射路徑就是服務名本身。例如服務名爲:service-provider,則默認的映射路徑就 是:/service-provider/**

也就是說,剛纔的映射規則我們完全不配置也是OK的,不信就試試看

5 路由前綴

配置示例:

zuul:
  routes:
    service-provider: /service-provider/**
    service-consumer: /service-consumer/**
  prefix: /api # 添加路由前綴

我們通過zuul.prefix=/api來指定了路由的前綴,這樣在發起請求時,路徑就要以/api開頭。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章