Eclipse(STS) 初次搭建Spring Cloud項目之路由器(服務網關)zuul(六)

1、爲何要使用服務網關

若是不使用服務網關的話,客戶端直接與各個微服務交互會出現如下幾點問題

  • 客戶端會屢次請求不一樣的微服務,增長了客戶端的複雜性。
  • 存在跨域請求,在必定場景下處理相對複雜。
  • 認證複雜,每一個服務都須要獨立認證。
  • 難以重構,隨着項目的迭代,可能須要從新劃分微服務。
  • 某些微服務可能使用了防火牆/瀏覽器不友好的協議,直接訪問會有必定的困難。

微服務網關是介於客戶端與服務器端之間的中間層,全部的外部請求都會先通過微服務網關。使用微服務網關能夠解決以上的問題。微服務網關封裝了應用程序的內部結構,客戶端只需跟網關交互,而無需直接調用特定微服務的接口。除此以外,還有如下優勢:

  • 易於監控。可在微服務網關收集監控數據並將其推送到外部系統進行分析。
  • 易於認證。可在微服務網關上進行認證,而後再將請求轉發到後端的微服務,而無需在每一個微服務中進行認證。
  • 減小了客戶端與每一個微服務之間的交互次數。

2、什麼是zuul

Zuul是Netflix開源的微服務網關,它能夠和Eureka、Ribbon、Hystrix等組件配合使用。Zuul的核心是一系列的過濾器,這些過濾器能夠完成如下功能web

  • 身份認證與安全:識別每一個資源的驗證要求,並拒絕那些與要求不符的請求。
  • 審查與監控:在邊緣位置追蹤有意義的數據和統計結果,從而帶來精確的生產視圖。
  • 動態路由:動態地將請求路由到不一樣的後端集羣。
  • 壓力測試:逐漸增長指向集羣的流量,以瞭解性能。
  • 負載分配:爲每一種負載類型分配對應容量,並棄用超出限定值的請求。
  • 靜態響應處理:在邊緣位置直接創建部分響應,從而避免其轉發到內部集羣。
  • 多區域彈性:跨越AWS Region進行請求路由,旨在實現ELB(Elastic Load Balancing)使用的多樣化,以及讓系統的邊緣更貼近系統的使用者。
  • 以上內容參考 blog.csdn.net/qq_31142553…

3、下面開始寫代碼

建立項目模塊cloud-demo-zuul,項目結構以下:

編寫yml

server:
 port: 8812 # 你的端口
spring:
  application:
    name: zuul
eureka:
  client:
    service-url:
      defaultZone: http://admin:admin@server1:8761/eureka/,http://admin:admin@server2:8762/eureka/
zuul:
  routes:
    api-a:
      path: /api-a/**
      serviceId: ribbon
    api-b:
      path: /api-b/**
      serviceId: feign
複製代碼

pom文件以下

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.hewl</groupId>
		<artifactId>cloud-demo-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>cloud-demo-zuul</artifactId>
	<name>cloud-demo-zuul</name>
	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
		</dependency>
	</dependencies>
</project>

複製代碼

啓動類代碼以下:在啓動類上添加註解@EnableZuulProxy,聲明一個Zuul代理。該代理使用Ribbon來定位註冊在Eureka Server中的微服務;同時,該代理還整合了Hystrix,從而實現了容錯,全部通過Zuul的請求都會在Hystrix命令中執行。

package com.hewl;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class ZuulApplication {

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

複製代碼

下面啓動項目測試spring

  1. 啓動eureka-server服務
  2. 啓動eureka-client服務
  3. 啓動feign服務
  4. 啓動ribbon服務
  5. 啓動zuul服務

請求 http://localhost:8812/api-b/test?name=張三 apache

路由配置成功!
相關文章
相關標籤/搜索