1、Ribbon客户端负载均衡1.1 依赖

ribbon负载均衡策略(Ribbon客户端负载均衡)(1)

1.2 配置信息

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

1.3 测试1.3.0 测试准备1.3.0.1 复制一个服务端

ribbon负载均衡策略(Ribbon客户端负载均衡)(2)

1.3.0.2 eureka查看服务

ribbon负载均衡策略(Ribbon客户端负载均衡)(3)

1.3.0.3 查询数据

ribbon负载均衡策略(Ribbon客户端负载均衡)(4)

1.3.1 默认是轮询1.3.1.1 第一个服务端

ribbon负载均衡策略(Ribbon客户端负载均衡)(5)

1.3.1.2 第二个服务端

ribbon负载均衡策略(Ribbon客户端负载均衡)(6)

1.3.2 指定为随机 后1.3.2.1 第一个服务端

ribbon负载均衡策略(Ribbon客户端负载均衡)(7)

1.3.2.2 第二个服务端

ribbon负载均衡策略(Ribbon客户端负载均衡)(8)

1.3.3 可以自定义 负载均衡规则(省略)2、Zuul网关2.1 模块说明

ribbon负载均衡策略(Ribbon客户端负载均衡)(9)

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/** 都可以访问

ribbon负载均衡策略(Ribbon客户端负载均衡)(10)

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

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

ribbon负载均衡策略(Ribbon客户端负载均衡)(11)

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 测试

ribbon负载均衡策略(Ribbon客户端负载均衡)(12)

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

ribbon负载均衡策略(Ribbon客户端负载均衡)(13)

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 本地仓

ribbon负载均衡策略(Ribbon客户端负载均衡)(14)

2.3.5.2 远程仓

ribbon负载均衡策略(Ribbon客户端负载均衡)(15)

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 配置服务端与配置客户端

ribbon负载均衡策略(Ribbon客户端负载均衡)(16)

3.4.1 本地公共配置读取

ribbon负载均衡策略(Ribbon客户端负载均衡)(17)

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

ribbon负载均衡策略(Ribbon客户端负载均衡)(18)

,