1. zuul 简介
我这简单理解为 微服务架构中,系统被拆分多个模块对外提供服务后,对外提供的服务有不同的ip,端口,对于前端同学来说,不可能每调用一个服务使用不同的ip和端口,这就太恐怖了,所以呢,就搞了个 网关,前端只需要知道少量的就可以了。Zuul就是做这个工作的。下面看下使用
2. zuul使用
- 创建工程 我这里创建了4个工程,分别是两个提供服务的 movie和cartoon(分别提供电影和动漫的服务),一个eureka注册中心工程,一个zuul工程。
-
注册中心 (linn-eureka)
2.1 添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>2.2 启动类上 添加注解
@EnableEurekaServer @SpringBootApplication public class LinnEurekaApplication { public static void main(String[] args) { SpringApplication.run(LinnEurekaApplication.class, args); } }2.3 .yml 配置类 注意 配置下 host
spring: application: name: eureka-server # 端口号 server: port: 7000 eureka: instance: hostname: server client: # 是否拉取 注册的服务信息, 默认true;因为这是一个单点的EurekaServer,不需要同步其它EurekaServer节点的数据 fetch-registry: false # 是否注册自身到eureka服务,默认true register-with-eureka: false -
两个服务(linn-movie和linn-cartoon)
3.1 添加依赖
<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>3.2 linn-movie 中添加一个服务
@RestController public class MovieController { @RequestMapping("movieChannel") public String movieChannel() { return "movieChannel"; } }3.3 linn-cartoon 中添加一个服务
@RestController public class CartoonController { @RequestMapping("cartoonChannel") public String cartoonChannel() { return "cartoonChannel"; } }3.4 linn-movie和linn-cartoon 都注册到 eureka
- linn-movie 配置 ,对应的 .yml中添加
server: port: 9010 spring: application: name: movie eureka: client: serviceUrl: defaultZone: http://server:7000/eureka/- linn-cartoon 配置 ,对应的 .yml中添加
server: port: 9020 spring: application: name: cartoon eureka: client: serviceUrl: defaultZone: http://server:7000/eureka/ -
zuul配置
4.1 添加依赖
<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>4.2 启动类 添加注解@EnableZuulProxy
@SpringBootApplication @EnableZuulProxy public class LinnZuulApplication { public static void main(String[] args) { SpringApplication.run(LinnZuulApplication.class, args); } }4.3 .yml中配置 routers,并且注册到 eureka
server: port: 10010 spring: application: name: zuul eureka: client: serviceUrl: defaultZone: http://server:7000/eureka/ zuul: routes: movie: path: /movie/** # 访问这个路径的 都路由到serviceId 指定的 服务上 serviceId: movie cartoon: path: /cartoon/** # 访问这个路径的 都路由到serviceId 指定的 服务上 serviceId: cartoon -
访问测试
5.1 启动这个 4个工程,访问localhost:7000
可以看到 三个服务注册上去了
5.2 分别访问 zuul
http://localhost:10010/cartoon/cartoonChannel http://localhost:10010/movie/movieChannel
可以看到 路由过去了