部分内容摘自 Spring Cloud 官方文档中文版
本文源码地址:
目录
@EnableZuulProxy 与 @EnableZuulServer
Zuul 简介:
路由是微服务体系结构的一部分,是 Netflix 的基于 JVM 的路由器和服务器端负载均衡器。
Zuul 默认结合 Ribbon 实现了负载均衡的功能。
Zuul 基本使用:
根据 服务发现:Eureka (一) 注册和运行 创建一个服务注册中心(eureka_server)和两个功能相同的 Eureka 客户端(eureka_client_1、eureka_client_2)
两个客户端的配置文件分别改为:
server.port=8762
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
spring.application.name=helloClient1
server.port=8763
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
spring.application.name=helloClient2
两个客户端的 spring.application.name 相同,代表提供了同一种服务,分配不同的端口模拟在不同服务器的场景
在两个客户端模块中分别创建一个相同的 HelloController
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${server.port}")
private String port;
@RequestMapping(value = "/hello")
public String hello(){
return "my port is " + port;
}
}
按照创建 Eureka 客户端的步骤创建一个新的 Module:zuulService
在 pom.xml 中加入以下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
编写 application.properties
zuul.routes.{}.path= // 设置访问路径
zuul.routes.{}.service-id= (或 zuul.routes.{}.url=) // 设置要路由到的服务
{} 中是该路由的名字
server.port=8766
spring.application.name=zuulService
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
zuul.routes.client1.path=/client1/*
zuul.routes.client1.service-id=helloClient1
zuul.routes.client2.path=/client2/*
zuul.routes.client2.service-id=helloClient2
修改启动类,为其加入 @EnableZuulProxy、@EnableEurekaClient 注解
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;
@EnableZuulProxy
@E