SpringCloud(五)微服务网关Zuul

1.网关Zuul简介

Zuul 是 Netflix OSS 中的一员,是一个基于 JVM 路由和服务端的负载均衡器。提供路由、监控、弹性、安全等方面的服务框架。Zuul 能够与 Eureka、Ribbon、Hystrix 等组件配合使用。

Zuul 的核心是过滤器,通过这些过滤器我们可以扩展出很多功能,比如:

  • 1)动态路由 动态地将客户端的请求路由到后端不同的服务,做一些逻辑处理,比如聚合多个服务的数据返回。
  • 2)请求监控 可以对整个系统的请求进行监控,记录详细的请求响应日志,可以实时统计出当前系统的访问量以及监

控状态。

  • 3)认证鉴权 对每一个访问的请求做认证,拒绝非法请求,保护好后端的服务。
  • 4)压力测试 压力测试是一项很重要的工作,像一些电商公司需要模拟更多真实的用户并发量来保证重大活动时系统的稳定。通过 Zuul
    可以动态地将请求转发到后端服务的集群中,还可以识别测试流量和真实流量,从而做一些特殊处理。
  • 5)灰度发布 灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

2.为什么使用网关zuul

不同的微服务一般有不同的网络地址,而外部的客户端可能需要调用多个服务的接口オ能完成一个业务需求。比如一个电影购票的收集APP,可能会调用电影分类微服务,用户微服务,支付微服务等。如果客户端直接和微服务进行通信,会存在以下问题:

  • #客户端会多次请求不同微服务,増加客户端的复杂性
  • #存在跨域请求,在一定场景下处理相对复杂认证复杂
  • #每一个服务都需要独立认证

3.程序简单流程

前端程序通过网关来访问指定微服务。
在这里插入图片描述

4.Zuul网关搭建快速体验

(1)创建maven的modul在pom中添加依赖

<dependencies>
    <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>
</dependencies>

(2)添加yml配置文件

server:
  port: 9998
spring:
  application:
    name: diplomaproject-managerzuul
eureka: #将此服务注册到eureka
  client:
    service-url:
      defaultZone: http://127.0.0.1:9999/eureka/
  instance:
    prefer-ip-address: true #可以跨域访问
zuul:
  routes:
    host:
      connect-timeout-millis: 15000 #HTTP连接超时大于Hystrix的超时时间
      socket-timeout-millis: 60000   #socket超时
    diplomaproject-person: #服务名称
      path: /user/** #配置请求url的请求规则
      serviceId: diplomaproject-person #指明eureka注册中心的服务id

(3)添加启动类

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
@EnableEurekaClient
@EnableZuulProxy //使用网关代理
public class ManagerZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ManagerZuulApplication.class);
    }
}

(4)重启eureka和启动网管代理服务

在这里插入图片描述

5.Zuul过滤器快速体验

(1)在之前创建好的网关服务中创建过滤器并实现ZuulFilter接口

package com.diplomaproject.manager.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;



@Component
public class ManagerFilter extends ZuulFilter {
    /*指定过滤器的类型
     * 1.pre--在操作之前过滤
     * 2.post--在操作之后过滤
     * 3.route--在路由请求时候被调用
     * 4.error--处理请求时发生错误时被调用
     * */
    @Override
    public String filterType() {
        return "pre";
    }

    /*多个过滤器存在时,指定过滤器的优先级,数字越小优先级越高
     * */
    @Override
    public int filterOrder() {
        return 0;
    }

    /*
     * 过滤器是否开启
     * 1.true--开启
     * 2.false--不开启
     * */
    @Override
    public boolean shouldFilter() {
        return true;
    }
/*
* 过滤器内执行的操作
* return 任何object的值都表示继续执行
* RequestContext currentContext = RequestContext.getCurrentContext();
* currentContext.setSendZuulResponse(false);表示不再继续执行
*
* */
    @Override
    public Object run() throws ZuulException {
        System.out.println("执行managerFilter过滤器。。。");
        return  null;

    }
}

(2)重启eureka和网关服务

在这里插入图片描述
经过网关请求头信息丢失解决

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像夏天一样热

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值