javashu0 2019-06-27
路由是微服务体系结构的一个组成部分。例如,/
可以映射到您的Web应用程序,/api/users
映射到用户服务,并将/api/shop
映射到商店服务。Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器。
Netflix使用Zuul进行以下操作:
Zuul的规则引擎允许基本上写任何JVM语言编写规则和过滤器,内置Java和Groovy。
以上内容官方直译
Zuul
<parent> <!-- spring boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <!-- netflix-eureka-client--> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <!-- netflix-zuul --> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意:
Zuul
引入的Maven依赖中artifactId
有变动,SpringBoot2.0之前
的版本为spring-cloud-starter-zuul
@EnableZuulProxy @EnableDiscoveryClient @SpringBootApplication public class ZuulServiceApplication { public static void main(String[] args) { SpringApplication.run(ServiceZuulApplication.class, args); } }
application.yml
配置eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ server: port: 8769 spring: application: name: service-zuul zuul: routes: api-a: path: /api-a/** serviceId: service-ribbon api-b: path: /api-b/** serviceId: service-feign
将名称为service-zuul
的Zuul
服务注册到注册中心,端口为8769
配置路由相关参数,将path属性值
对应的地址转发
给服务名称为serviceId属性值
的服务
启动一个服务注册中心,两个服务提供者,一个服务消费者(Ribbon),一个服务消费者(Feign),一个Zuul路由服务
访问 http://localhost:8769/api-a/h...,浏览器显示:
hi forezp,i am from port:8762
访问 http://localhost:8769/api-b/h...,浏览器显示:
hi forezp,i am from port:8762
2、架构图zuul 像其他微服务一样作为一个微服务向eureka server注册,并且能够通过注册列表获取所有的可用服务,其内部默认实现了ribbon,可达到负载均衡的目的,此时的微服务架构图如下: