标签:负载 均衡 conf 依赖项 [] 注册 local enc version
通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了。实际上在实现微服务架构时,服务名与服务实例地址的关系在 eureka server 中已经存在了,所以只需要将Zuul注册到 eureka server上去发现其他服务,就可以实现对 serviceId 的映射,并且启用了 eureka server 同时也会启用 ribbon 对服务进行负载均衡调用,加入 Zuul 到微服务集群架构图如下:
Zuul 微服务网关集群示例
创建名为 spring-cloud-zuul-microservices 的 Spring Cloud 项目,并增加 zuul、eureka 依赖,修改 POM.xml 中增加以下依赖项:
<?xmlversion="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
? ?
<groupId>org.lixue.zuul</groupId>
<artifactId>spring-cloud-zuul-microservices</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
? ?
<name>spring-cloud-zuul-microservices</name>
? ?
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
<relativePath/><!--lookupparentfromrepository-->
</parent>
? ?
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR5</spring-cloud.version>
</properties>
? ?
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
? ?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
? ?
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
? ?
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
? ?
在启动类上使用注解 @EnableZuulProxy 标注类,即开启 Zuul 功能。
? ?
package org.lixue.zuul;
? ?
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
? ?
@EnableZuulProxy
@SpringBootApplication
public class SpringCloudZuulMicroservicesApplication{
? ?
public static void main(String[]args){
SpringApplication.run(SpringCloudZuulMicroservicesApplication.class,args);
}
}
? ?
如果配置了 serviceId 或者 url 的配置项不是简单的路由格式(不以 http: 或 https:开头),也不是跳转路由格式(forward:开头),那么就会执行 ribbon 路由过滤器。
#配置应用名称
spring:
application:
name: spring-cloud-zuul-microservices
#配置服务端口
server:
port:9200
#设置eureka服务注册中心的地址,如果多个以逗号分割
eureka:
client:
service-url:
#defaultZone表示默认的区域的eureka服务地址,多个使用逗号分割
defaultZone:http://eurekaserver01:9000/eureka/,#http://eurekaserver02:9000/eureka/
#zuul路由配置
zuul:
routes:
#表示http://localhost:9100/hello/speaks地址,路由到http://HELLOWORLD-PROVIDER/speaks,其中具体地址是通过eureka获取
hello:
path: /hello/**
#或者使用url:HELLOWORLD-PROVIDER含义一样
serviceId: HELLOWORLD-PROVIDER
该项目依赖一个eureka-sserver、service-provider 服务,首先启动 eureka-server 和 多个 service-provider 服务,然后启动 spring-cloud-zuul-microservices 服务,访问 http://localhost:9200/hello/speaks?names=123 地址,并多次刷新,可以看到分别访问了不同的 service-provider 服务,输出如下:
{"123":"Hello World 123 Port=8080"}
{"123":"Hello World 123 Port=8002"}
{"123":"Hello World 123 Port=8001"}
? ?
? ?
? ?
? ?
? ?
Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群
标签:负载 均衡 conf 依赖项 [] 注册 local enc version
原文地址:https://www.cnblogs.com/li3807/p/8916852.html