设为首页 加入收藏

TOP

SpringBoot(三) - Ribbon客户端负载均衡,Zuul网关,Config配置中心(一)
2023-07-25 21:29:40 】 浏览:66
Tags:SpringBoot Ribbon Zuul 网关 Config

1、Ribbon客户端负载均衡

1.1 依赖

1.2 配置信息

# feign默认加载了ribbon负载均衡,默认负载均衡机制是:轮询
# 负载均衡机制是添加在消费端(客户端)的,如果改为随机,指定服务名,指定规则
edocmall-server:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

1.3 测试

1.3.0 测试准备

1.3.0.1 复制一个服务端

1.3.0.2 eureka查看服务

1.3.0.3 查询数据

1.3.1 默认是轮询

1.3.1.1 第一个服务端

1.3.1.2 第二个服务端

1.3.2 指定为随机 后

1.3.2.1 第一个服务端

1.3.2.2 第二个服务端

1.3.3 可以自定义 负载均衡规则(省略)

2、Zuul网关

2.1 模块说明

2.2 主要依赖

<!--   eureka 客户端依赖     -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

<!-- zuul 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>

2.3 配置信息

# 端口
server:
  port: 8100

# 服务名
spring:
  application:
    name: edocmall-zuul

# eureka 注册中心的配置
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8096/eureka
  # 关闭自我保护机制,保证不可用的服务及时剔除
  server:
    enable-self-preservation: false

# zuul 网关配置
zuul:
  ignored-services: '*'  # 默认情况下,zuul网关服务会自动将eureka上的所有注册服务名(serviceId)设置为默认路由地址(path),如果只能按照path配置路径进行路由,必须手动屏蔽默认路由; *:表示所有的服务名不能作为路由地址,也可以指定具体服务名不能作为路由地址
  routes:
    edocmall-web-kgc: #默认路由的服务名,可以写真实的服务名也可以自定义
      #方式一
#      path: /edocmall-web/**  # 指定自定义网关的映射路劲前缀,代理的请求,必须是指定的访问路径,才可以进入网关,否者无法进行网关映射处理
#      url: http://127.0.0.1:8098 # 指定请求服务的真实地址(一定要确保可以进行访问即地址有效),注意,无法进行集群处理,不利于维护和扩展
      #方式二
      path: /edocmall-zuul/** #指定自定义网关路径,配合service使用,实现通过指定服务名进行接口调用
      serviceId: edocmall-web  # 指定的是eureka注册中心上,真实服务名,好处:(不需要维护请求地址)只需要指定服务名,自动根据服务名路由到对应的所有集群服务上
    edocmall-server-kgc:
      path: /edocmall-zuul2/**
      serviceId: edocmall-server

2.4 主启动类上的注解

@EnableEurekaClient
@EnableZuulProxy //开启网关代理功能

2.5 测试

2.5.1 不屏蔽默认路由

serviceId: edocmall-web
和
path: /edocmall-zuul/**
都可以访问

2.5.2 屏蔽默认路由 ignored-services: '*'

只有
path: /edocmall-zuul/**
都可以访问

2.6 自定义网关过滤器

2.6.1 自定义网关过滤器

//Description: 自定义网关过滤器
@Component
public class AuthZuulFilter extends ZuulFilter {
    @Override
    public String filterType() {
        //指定网关过滤器的类型,允许返回值只能是:pre,post,route,error
        //pre : 在请求被路由转发前调用,通常用于权限校验,日志处理等
        //post : 在请求被路由转发后调用,一般都是收集服务调用信息
        //route : 在请求被路由转发是调用(服务被调用前),通常用户在特定服务调用前增加参数处理
        //error: 在请求被路由转发过程中,出现异常是调用
        return "pre";
    }

    @Override
    public int filterOrder() {
        //指定网关过滤器的优先级,允许值是int类型整数,值越小优先级越高
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        //指定网关过滤器是否需要执行自定义的业务逻辑处理,如果是false不执行,true执行,执行自定义业务逻辑处理,就是下面的run方法内的业务逻辑
        return true;
    }

    @Override
    public Object run() {
        //自定义网关过滤器需要执行的业务逻辑处理

        //模拟场景:当请求到达网关,网关接收请求进行请求映射处理,把必须要先校验权限,
        // 如果权限校验失败,不进行路由转发,只有权限校验成功,才可以路由转发到真实服务上

        //引入知识点:用户在登录状态保持,一般是通过token令牌实现的,当用户登录成功,会返回一个token令牌给客户端保存,
        // 如果再次请求,自动携带改=该令牌,如果令牌有效,权限通过,否者登录校验失败,不允许访问

        //为了方便演示,token变为请求参数,方便获取(正常流程是后端登录成功后返回给客户端,且必须要保存在请求头,方便携带),如果请求地址中没有token参数,就不给访问,如果有,可以访问

        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();

        //根据请求对象获取请求参数
        String token = request.getParameter("token");

        // TOO 必须要校验token的有效性

        //权限校验,如果token令牌是有效的,可以进行路由转发,否者需要重新登陆
        if(StringUtils.isBlank(token)){
            //token失败,权限校验失败,必须过滤调当前请求,不能进行路由转发
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇java 多线程的start()和run()的理.. 下一篇Java中关于String类以及字符串拼..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目