SpringCloud 集成zuul路由网关

1 篇文章 0 订阅
1 篇文章 0 订阅

介绍
Zuul 作为路由网关组件,在微服务架构中有着非常重要的作用,主要体现在以下6个方面。
1:Zuul、Ribbon以及Eureka相结合,可以实现智能路由和负载均衡的功能,Zuul能够
将请求流量按某种策略分发到集群状态的多个服务实例。
2:网关将所有服务的API接口统 聚合,并统 对外暴露。外界系统调用 API 接口时,
都是由网关对外暴露的API接口,外界系统不需要知道微服务系统中各服务相互调
用的复杂性。微服务系统 保护了其内部微服务单元的 API接口防止其被外界直
接调用,导致服务的敏感信息对外暴露。
3:网关服务可以做用户身份认证和权限认证,防止非法请求操作API接口,对服务器
起到保护作用。
4:网关可以实现监控功能,实时日志输出,对请求进行记录。
5:网关可以用来实现流量监控 在高流量的情况下,对服务进行降级。
6:API接口从内部服务分离出来 方便做测试。
工作原理:
Zuul 是通过 Servlet 来实现的,Zuul 通过自定义的 ZuulServlet(类似于Spring MVC的DispatcServlet 〕来对请求进行控制。 Zuul 的核心 系列过滤器,可以在 Http 请求的发起和响应返回期间执行 系列的过滤器。 Zuul 包括以下4种过滤器
1:PRE 过滤器 它是在请求路由到具体的服务之前执行的,这种类型的过滤器可 以做
安全验证,例如身份验证、 参数验证等。
2:ROUTING 过滤器 它用于将请求路由到具体的微服务。在默认情况下,它使用Http Client 进行网络请求。
3:POST 过滤器:它是在请求己被路由到微服务后执行的 般情况下,用作收集统计
信息、指标,以及将响应传输到客户端
4:ERROR过滤器:它是在其他过滤器发生错误时执行的
Zuul采取了动态读取、编译和运行这些过滤器 过滤器 间不能直接 信,而是通过RequestContext对象来共享数据 每个请求都会创建RequestContext对象Zuul过滤器具有以下关键特性。
Type(类型)Zuul过滤器的类型,这个类型决定了过滤器在请求的哪个阶段起作用,
例如Pre Post阶段等。
Execution Order(执行顺序):规定了过滤器的执行顺序,Order 的值越小,越先执行
Criteria(标准)Filter 行所需的条
Action(行动〉如果符合执行条件,则执行action(即逻辑代码)。
当一个客户端 Request 请求进入 Zuul 服务时,网关先进入“pre filter”进行一系列的验证、操作或者判断 然后交给“routing filter ”进行路由转发,转发到具体的服务实例进
行逻辑处理、返回数据。当具体的服务处理完后,最后由“post filter ,,进行处理, 该类型的处理器处理完之后,将 Response 信息返回给客户端。
ZuulServlet 是Zuul的核心 Servi et ZuulServlet 的作用是初始化 ZuulFilter 并编排这些ZuulFilter的执行顺序。该类中有一个service()方法,执行了过滤器执行的逻辑。(具体执行自行研究)
搭建zuul步骤
首先创建一个微服务model,命名为cyj_zuu,然后导入相应的pom文件如下:

<properties>
   <java.version>1.8</java.version>
   <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>

<dependencies>
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
   </dependency>
</dependencies>

配置文件继续把服务注册到eureka中,然后配置zuul

server:
  port: 8892
spring:
  application:
    name: zuul-gateway

eureka:
  client:
    serviceUrl:
	defaultZone:http://${EUREKA_ZONE_HOST:localhost}:${EUREKA_ZONE_PORT:8886}/eureka/
  instance:
    prefer-ip-address: true
zuul:
#(自定义路由映射)
  prefix: /api(前缀)
  routes: (设置路由)
    order-service:(自定义)
      path: /apigateway/order/**(自定义路径)
      serviceId: model-order(对应的相关服务)
  ignored-patterns: /*-service/** (统一上面的配置,其他入口忽略)
  ignored-services: order-service(忽略整个服务,对外提供接口)

在启动类上加上zuul的注解

@SpringBootApplication
@EnableZuulProxy(启动zuul服务额度注解)
@EnableDiscoveryClient(注册到注册中心的注解)

其实zuul是依靠加入注册中心可以获取到在注册中心的服务,依托于服务名根据对应的配置找到相应的接口 进行路由代理

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值