1、Ribbon客户端负载均衡1.1 依赖
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/05163C115-0.png)
文章插图
1.2 配置信息# feign默认加载了ribbon负载均衡,默认负载均衡机制是:轮询# 负载均衡机制是添加在消费端(客户端)的,如果改为随机,指定服务名,指定规则edocmall-server: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule1.3 测试1.3.0 测试准备1.3.0.1 复制一个服务端
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/0516364042-1.png)
文章插图
1.3.0.2 eureka查看服务
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/05163CU6-2.png)
文章插图
1.3.0.3 查询数据
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/0516361444-3.png)
文章插图
1.3.1 默认是轮询1.3.1.1 第一个服务端
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/05163C3M-4.png)
文章插图
1.3.1.2 第二个服务端
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/0516363951-5.png)
文章插图
1.3.2 指定为随机 后1.3.2.1 第一个服务端
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/0516361261-6.png)
文章插图
1.3.2.2 第二个服务端
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/05163640K-7.png)
文章插图
1.3.3 可以自定义 负载均衡规则(省略)2、Zuul网关2.1 模块说明
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/05163C5Z-8.png)
文章插图
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-server2.4 主启动类上的注解@EnableEurekaClient@EnableZuulProxy //开启网关代理功能2.5 测试2.5.1 不屏蔽默认路由serviceId: edocmall-web和path: /edocmall-zuul/**都可以访问
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/0516364294-9.png)
文章插图
2.5.2 屏蔽默认路由 ignored-services: '*'只有path: /edocmall-zuul/**都可以访问【三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心】
![三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心](http://img.zhejianglong.com/231019/0516362242-10.png)
文章插图
2.6 自定义网关过滤器2.6.1 自定义网关过滤器//Description: 自定义网关过滤器@Componentpublic 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失败,权限校验失败,必须过滤调当前请求,不能进行路由转发 requestContext.setSendZuulResponse(false); //修改返回提示信息 requestContext.setResponseStatusCode(HttpStatus.FORBIDDEN.value());// requestContext.setResponseBody(HttpStatus.FORBIDDEN.getReasonPhrase()); requestContext.setResponseBody("token令牌校验失败,请求非法 , 被拦截"); //设置响应的内容格式,防止中文乱码 HttpServletResponse response = requestContext.getResponse(); response.setContentType("text/html;charset=utf-8"); } //返回RequestContext 对象 return requestContext; }}
推荐阅读
- 三、Go环境安装
- 原神三相众物枯焦状态怎么恢复
- 三星zfold3最新消息_三星Galaxyzfold3上市
- 第三方代开的微信小程序更换管理员
- 三星f52和红米note10pro哪个值得买_三星f52和红米note10pro怎么选
- 之五 2流高手速成记:Springboot整合Shiro实现安全管理
- SpringBoot Starter缘起
- three.js webgl3D光伏,3D太阳能能源,3D智慧光伏、光伏发电、清洁能源三维可视化解决方案——第十六课
- 四十八 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-使用第三方UI框架
- 和平精英三周年潮玩舞台该怎么玩