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失败,权限校验失败,必须过滤调当前请求,不能进行路由转发
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;
}
}
2.6.2 测试

3、Config配置中心
3.1 模块介绍

3.2 conf-sever 配置服务端
3.2.1 依赖
<!-- eureka 客户端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- config 配置中心服务端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
3.2.2 配置信息 application.yml
# 端口
server:
port: 8101
# 服务名
spring:
application:
name: edocmall-conf-server
# 指定环境,适用于本地环境配置,即:将公共配置中心内部文件作为公共配置文件,提供给客户端使用
# profiles:
# active: native
# git 仓配置信息
cloud:
config:
server:
git:
uri: https://gitee.com/wangsong_huayu/kh96-conf-server.git
username: username
password: password
# eureka 注册中心的配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8096/eureka
3.2.3 主启动类上的注解
@EnableEurekaClient //config服务端注册到eureka注册中心
@EnableConfigServer //开启 congfig 配置中心服务端
3.2.4 本地公共配置 config-native.properties
# 自定义公共配置
kh96.conf.server=kh96-conf-server-native
3.2.5 git 仓 管理的配置信息
3.2.5.1 本地仓

2.3.5.2 远程仓

3.3 conf-client 配置客户端
3.3.1 依赖
<!-- eureka 客户端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- config 配置中心 客户端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
3.3.2 配置信息application.yml
# 端口
server:
port: 8102
# 服务名
spring:
application:
name: edocmall-conf-client
3.3.3 配置信息 bootstrap.properties
# 什么时候使用此配置文件
# 1、当使用SpringCloud的config配置中心时,在客户端需要注册到eureka注册中心时,eureka配置信息必须增加在此文件中,才会生效
# 2、当配置信息不能被其它的配置文件覆盖时,可以将内容配置到此文件中,优先级高于application(云可以遮住太阳)
# config客户端,配置eureka注册中心
eureka.client.service-url.defaultZone=http://127.0.0.1:8096/eureka
# config客户端,开启主动发现eureka注册中心上 注册的config配置中心服务端,默认是关闭的,必须手动开
spring.cloud.config.discovery.enabled=true
# config客户端,指定eureka注册中心上注册的config配置中心服务端的服务名
spring.cloud.config.discovery.service-id=edocmall-conf-server
# 读取本地 配置配置文件
# config客户端,指定从config配置中心服务端读取 本地 的公共配置文件名,注意:不需要加后缀,只要文件名
#spring.cloud.config.name=config-native
# 读取远程配置文件
# config客户端,指定从 config配置中服务端读取的文件名,对应远程创库文件名 符号 - ,前面的名称
spring.cloud.config.name=config
# config客户端,指定从 config配置中服务端读取的文件名,对应远程创库文件名 符号 - ,后面的名称
spring.cloud.config.profile=dev
# config客户端,指定从 config配置中服务端读取 对应git远程仓库中配置所在的分支名,默认是master主线分支,也可以指定其他分支
spring.cloud.config.label=master
3.3.4 请求方法
//测试读取config配置中心服务端提供的公共配置信息
@RestController
public class ConfigClientController {
@Value("${kh96.conf.server:kh96-conf-client-native}")
private String kh96ConfigServer;
// 客户端,测试读取服务端的公共配置信息
@GetMapping("/testConfigServer")
public String testGetPropertiesFromConfServer(){
return kh96ConfigServer;
}
}
3.3.5 主启动类上的注解
@EnableEurekaClient
3.4 测试
3.4.0 配置服务端与配置客户端

3.4.1 本地公共配置读取

3.4.2 git 仓管理的配置信息读取

SpringBoot(三) - Ribbon客户端负载均衡,Zuul网关,Config配置中心的更多相关文章
- spring cloud --- Ribbon 客户端负载均衡 + RestTemplate + Hystrix 熔断器 [服务保护] ---心得
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 当超大并发量并发访问一个服务接口时,服务器会崩溃 ,不仅导致这个接口无法 ...
- spring cloud --- Ribbon 客户端负载均衡 + RestTemplate ---心得【无熔断器】
spring boot 1.5.9.RELEASE spring cloud Dalston.SR1 1.前言 了解了 eureka 服务注册与发现 的3大角色 ,会使用RestTem ...
- springcloud(十二):Ribbon客户端负载均衡介绍
springcloud(十二):Ribbon客户端负载均衡介绍 Ribbon简介 使用分布式微服务脚骨的应用系统,在部署的时候通常会为部分或者全部微服务搭建集群环境,通过提供多个实例来提高系统的稳定型 ...
- Spring Cloud微服务Ribbon负载均衡/Zuul网关使用
客户端负载均衡,当服务节点出现问题时进行调节或是在正常情况下进行 服务调度.所谓的负载均衡,就是当服务提供的数量和调用方对服务进行 取舍的调节问题,在spring cloud中是通过Ribbon来解决 ...
- ③SpringCloud 实战:使用 Ribbon 客户端负载均衡
这是SpringCloud实战系列中第三篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...
- SpringCloud实战-Ribbon客户端负载均衡
前面我们已经完成了注册中心和服务提供者两个基础组件.接着介绍使用Spring Cloud Ribbon在客户端负载均衡的调用服务. ribbon 是一个客户端负载均衡器,可以简单的理解成类似于 ngi ...
- spring cloud 系列第3篇 —— ribbon 客户端负载均衡 (F版本)
源码仓库地址:https://github.com/heibaiying/spring-samples-for-all 一.ribbon 简介 ribbon是Netfix公司开源的负载均衡组件,采用服 ...
- Spring Cloud Ribbon客户端负载均衡(四)
序言 Ribbon 是一个客户端负载均衡器(Nginx 为服务端负载均衡),它赋予了应用一些支配 HTTP 与 TCP 行为的能力,可以得知,这里的客户端负载均衡也是进程内负载均衡的一种.它在 Spr ...
- springcloud 之Ribbon客户端负载均衡配置使用
pom.xml添加配置说明:这里服务注册与发现用的是Eureka,所以消费者端需要引入eureka,使用EurekaClient来调用服务 <dependency> <groupId ...
随机推荐
- 使用 Vue.js 框架后的感想
前言 用 Vue 已经有段时间了,把自己的所想所悟写下来,每一个想法都是非常宝贵的,记录成为生活,记录成为习惯. 简化开发 Vue 是可以辅助前端工程师开发 Web App 的一种框架,它节省很多时间 ...
- 理解C++函数指针和指针函数(一)
函数指针 实际上使用最多的还是指针函数,但我们还是可以先看看函数指针 奇怪的是,大家搜索指针函数,或者Pointer function,出来的还是函数指针的链接. OK,废话不多说,先给大家举个例子. ...
- Html飞机大战(六):移动飞机
好家伙,这篇移动主角 我们先来看看一个好东西, addEventListener() 方法 (他真的很好用) 我们直译一下,就叫他添加事件监听器方法 而可监听的对象就有很多啦 我们来了解一 ...
- Linux虚拟机启动报错挂载点丢失
fstab 挂载失败 实验准备 1) 准备:vim /etc/fstab /mnt1/cdrom 挂载点不在 2) 系统启动报错截图 修复步骤 /etc/fstab 中的错误和损坏的文件系统可能会阻止 ...
- alter role 导致的数据库无法登录问题
ALTER ROLE 用于更改一个数据库角色.只要改角色后续开始一个新会话,指定的值将会成为该会话的默认值,并且会覆盖 kingbase.conf中存在的值或者从命令行收到的值. 显性的更改角色的一 ...
- C++ 二级指针与 const 关键字
可用七种不同的方式将 const 关键字用于二级指针,如下所示: //方式一:所指一级指针指向的数据为常量,以下几种为等效表示 const int ** pptc; //方式一 int const * ...
- (一)JPA的快速入门
JPA简介 JPA是什么 JPA 是Java Persistence API的缩写,是一套由Java官方制定的ORM标准.当制定这套标准以后,市场上就出现很多JPA框架.如:OpenJPA(apach ...
- 基于深度学习的文本分类案例:使用LSTM进行情绪分类
Sentiment classification using LSTM 在这个笔记本中,我们将使用LSTM架构在电影评论数据集上训练一个模型来预测评论的情绪.首先,让我们看看什么是LSTM? LSTM ...
- Keepalived + Nginx 实现高可用 Web 负载均衡
一.Keepalived 简要介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前 ...
- 改变一个数组内元素的位置,不通过splice方法。
这个数据 现在已经完成了,将本来在第一位的18代金券改到第31位,下面说一下怎么实现的. //currHotRightsTypeSorted这个是数据源头,legalRightsType这个是数据的分 ...