Spring CloudFinchley】-14 微服务网关Zuul的搭建与使用

网友投稿 754 2022-05-30

文章目录

官方文档

Zuul概述

引入网关前后调用流程的变化

搭建单节点的Zuul

Step1. 创建子Module microservice-gateway-zuul

Step2. 添加maven依赖

Step3. 启动类添加注解 @EnableZuulProxy

Step4. 配置文件application.yml

Step6. 网关功能-路由规则测试

Step7. 网关功能-负载均衡测试

Step8. 网关功能-Hystrix监控测试

代码

官方文档

https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#_router_and_filter_zuul

Zuul概述

Zuul的主要功能是路由转发和过滤器。

路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。

zuul默认和Ribbon结合实现了负载均衡的功能。

引入网关前后调用流程的变化

在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。网关直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端

简单画2个图,来说明下引入网关后,调用流程的变化。

不使用网关的情况:

引入网关后:

搭建单节点的Zuul

这里我们会把zuul注册到Eureka上

Step1. 创建子Module microservice-gateway-zuul

Step2. 添加maven依赖

org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.cloud spring-cloud-starter-netflix-zuul

1

2

3

4

5

6

7

8

9

10

11

官方Note: the Zuul starter does not include a discovery client, so, for routes based on service IDs, you need to provide one of those on the classpath as well (Eureka is one choice). 因为我们使用serverID去做路由,所以我们这里引入了Eureka

Step3. 启动类添加注解 @EnableZuulProxy

package com.artisan.microservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.zuul.EnableZuulProxy; @SpringBootApplication @EnableZuulProxy public class MicroServiceGateWayZuulApplication { public static void main(String args[]) { SpringApplication.run(MicroServiceGateWayZuulApplication.class, args); } }

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

通过注解@EnableZuulProxy声明一个zuul代理,这个代理整合了Ribbon来定位注册在Eureka上的微服务,同时还整合了hystrix实现容错,所有经过zuul的请求都会在Hystrix命令中执行。

Step4. 配置文件application.yml

server: port: 4534 spring: application: name: microservice-gateway-zuul eureka: client: service-url: defaultZone: http://artisan:artisan123@localhost:8761/eureka instance: instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}

1

2

3

4

5

6

7

8

9

10

11

12

13

观察上面的配置文件,是没有zuul相关的配置的,我们仅仅添加了一个zuul的依赖,同时将zuul注册到Eureka上。 至此,一个单节点的最精简版的zuul就搭建完成了,当然了zuul支持各种配置,我们的这个demo只是没有用到而已。

Step6. 网关功能-路由规则测试

启动注册中心Eureka Server 项目 microservice-discovery-eureka

启动服务提供者micorservice-provider-user

启动服务消费者 micorservice-consumer-movie-ribbon

启动zuul网关microservice-gateway-zuul

启动zuul的时候,可以看到如下日志

Mapped URL path [/microservice-provider-user/**] onto handler of type [class org.springframework.cloud.netflix.zuul.web.ZuulController] Mapped URL path [/micorservice-consumer-movie-ribbon/**] onto handler of type [class org.springframework.cloud.netflix.zuul.web.ZuulController]

1

2

访问 Eureka Server页面 http://localhost:8761/ ,查看服务注册情况

验证下路由转发的功能

通过配置文件,我们知道zuul服务的启动端口为 4534 ,

通过zuul访问服务提供者提供的服务看下

http://localhost:4534/microservice-provider-user/user/3

url中的microservice-provider-user为注册在eureka上的微服务的名称

服务被转发到了microservice-provider-user微服务中 ,相当于请求 http://localhost:8900/user/3

同理,通过zuul访问服务消费者

http://localhost:4534/micorservice-consumer-movie-ribbon/movie/4

服务被转发到了micorservice-consumer-movie-ribbon微服务中 ,相当于请求 http://localhost:7902/movie/4

默认情况下,zuul会代理所有注册在Eureka Server上的微服务,并且Zuul的路由规则为 http://zuul_host:zuul_port/微服务在EurekaServer上的serviceId/** 被转发到serviceId对应的微服务上。

Step7. 网关功能-负载均衡测试

启动注册中心Eureka Server 项目 microservice-discovery-eureka

启动多个服务提供者micorservice-provider-user ,在sts中换个端口,可启动多个,再加个8901端口上的服务

启动服务消费者 micorservice-consumer-movie-ribbon

启动zuul网关microservice-gateway-zuul

访问 Eureka Server页面 http://localhost:8761/ ,查看服务注册情况

访问两次服务提供者提供的服务,观察后台日志

Spring Cloud【Finchley】-14 微服务网关Zuul的搭建与使用

http://localhost:4534/microservice-provider-user/user/3 ,

8900:

8901:

说明zuul整合了Ribbon负载均衡的功能

Step8. 网关功能-Hystrix监控测试

根据前几篇的学习 Spring Cloud【Finchley】-10Hystrix监控 我们知道要想实现Hystrix监控中,必须要有如下几个依赖

查看zuul微服务的pom依赖

前两个具备了,只需要修改下applicaiton.yml即可。

增加配置,开启端点监控

#actuator 启用所有的监控端点 “*”号代表启用所有的监控端点,可以单独启用,例如,health,info,metrics # spring boot 升为 2.0 后,为了安全,默认 Actuator 只暴露了2个端点,heath 和 info management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS

1

2

3

4

5

6

7

8

9

10

重启下microservice-gateway-zuul微服务

访问zuul的hystrix.stream http://localhost:4534/actuator/hystrix.stream

说明application.yml中的配置生效了。 ping 说明还未有服务调用,接下来调用下服务 ,就可以看到了

接下来我们用Dashboard来直观的看下

访问micorservice-hystrix-dashboard提供的页面 http://localhost:8888/hystrix

地址输入zuul服务的 hystrix stream地址 http://localhost:4534/actuator/hystrix.stream , title 任意,点击Monitor Stream

多访问几次 http://localhost:4534/microservice-provider-user/user/3 ,观察数据的变化 ,如下

通过以上示例,说明zuul已经整合了Hystrix监控。 容错后面来单独讨论

代码

https://github.com/yangshangwei/SpringCloudMaster/tree/master/microservice-gateway-zuul

NAT Spring 微服务

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:教师节送什么老师最开心?程序员三招解决家长送礼难题!
下一篇:开始编写第一个Spark程序
相关文章