SpringBoot(三) - Ribbon客户端负载均衡,Zuul网关,Config配置中心 ...

打印 上一主题 下一主题

主题 549|帖子 549|积分 1647

1、Ribbon客户端负载均衡

1.1 依赖


1.2 配置信息
  1. # feign默认加载了ribbon负载均衡,默认负载均衡机制是:轮询
  2. # 负载均衡机制是添加在消费端(客户端)的,如果改为随机,指定服务名,指定规则
  3. edocmall-server:
  4.   ribbon:
  5.     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 主要依赖
  1. <dependency>
  2.     <groupId>org.springframework.cloud</groupId>
  3.     <artifactId>spring-cloud-starter-eureka</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>org.springframework.cloud</groupId>
  7.     <artifactId>spring-cloud-starter-zuul</artifactId>
  8. </dependency>
复制代码
2.3 配置信息
  1. # 端口
  2. server:
  3.   port: 8100
  4. # 服务名
  5. spring:
  6.   application:
  7.     name: edocmall-zuul
  8. # eureka 注册中心的配置
  9. eureka:
  10.   client:
  11.     service-url:
  12.       defaultZone: http://127.0.0.1:8096/eureka
  13.   # 关闭自我保护机制,保证不可用的服务及时剔除
  14.   server:
  15.     enable-self-preservation: false
  16. # zuul 网关配置
  17. zuul:
  18.   ignored-services: '*'  # 默认情况下,zuul网关服务会自动将eureka上的所有注册服务名(serviceId)设置为默认路由地址(path),如果只能按照path配置路径进行路由,必须手动屏蔽默认路由; *:表示所有的服务名不能作为路由地址,也可以指定具体服务名不能作为路由地址
  19.   routes:
  20.     edocmall-web-kgc: #默认路由的服务名,可以写真实的服务名也可以自定义
  21.       #方式一
  22. #      path: /edocmall-web/**  # 指定自定义网关的映射路劲前缀,代理的请求,必须是指定的访问路径,才可以进入网关,否者无法进行网关映射处理
  23. #      url: http://127.0.0.1:8098 # 指定请求服务的真实地址(一定要确保可以进行访问即地址有效),注意,无法进行集群处理,不利于维护和扩展
  24.       #方式二
  25.       path: /edocmall-zuul/** #指定自定义网关路径,配合service使用,实现通过指定服务名进行接口调用
  26.       serviceId: edocmall-web  # 指定的是eureka注册中心上,真实服务名,好处:(不需要维护请求地址)只需要指定服务名,自动根据服务名路由到对应的所有集群服务上
  27.     edocmall-server-kgc:
  28.       path: /edocmall-zuul2/**
  29.       serviceId: edocmall-server
复制代码
2.4 主启动类上的注解
  1. @EnableEurekaClient
  2. @EnableZuulProxy //开启网关代理功能
复制代码
2.5 测试

2.5.1 不屏蔽默认路由
  1. serviceId: edocmall-web
  2. path: /edocmall-zuul/**
  3. 都可以访问
复制代码

2.5.2 屏蔽默认路由 ignored-services: '*'
  1. 只有
  2. path: /edocmall-zuul/**
  3. 都可以访问
复制代码

2.6 自定义网关过滤器

2.6.1 自定义网关过滤器
  1. //Description: 自定义网关过滤器
  2. @Component
  3. public class AuthZuulFilter extends ZuulFilter {
  4.     @Override
  5.     public String filterType() {
  6.         //指定网关过滤器的类型,允许返回值只能是:pre,post,route,error
  7.         //pre : 在请求被路由转发前调用,通常用于权限校验,日志处理等
  8.         //post : 在请求被路由转发后调用,一般都是收集服务调用信息
  9.         //route : 在请求被路由转发是调用(服务被调用前),通常用户在特定服务调用前增加参数处理
  10.         //error: 在请求被路由转发过程中,出现异常是调用
  11.         return "pre";
  12.     }
  13.     @Override
  14.     public int filterOrder() {
  15.         //指定网关过滤器的优先级,允许值是int类型整数,值越小优先级越高
  16.         return 0;
  17.     }
  18.     @Override
  19.     public boolean shouldFilter() {
  20.         //指定网关过滤器是否需要执行自定义的业务逻辑处理,如果是false不执行,true执行,执行自定义业务逻辑处理,就是下面的run方法内的业务逻辑
  21.         return true;
  22.     }
  23.     @Override
  24.     public Object run() {
  25.         //自定义网关过滤器需要执行的业务逻辑处理
  26.         //模拟场景:当请求到达网关,网关接收请求进行请求映射处理,把必须要先校验权限,
  27.         // 如果权限校验失败,不进行路由转发,只有权限校验成功,才可以路由转发到真实服务上
  28.         //引入知识点:用户在登录状态保持,一般是通过token令牌实现的,当用户登录成功,会返回一个token令牌给客户端保存,
  29.         // 如果再次请求,自动携带改=该令牌,如果令牌有效,权限通过,否者登录校验失败,不允许访问
  30.         //为了方便演示,token变为请求参数,方便获取(正常流程是后端登录成功后返回给客户端,且必须要保存在请求头,方便携带),如果请求地址中没有token参数,就不给访问,如果有,可以访问
  31.         RequestContext requestContext = RequestContext.getCurrentContext();
  32.         HttpServletRequest request = requestContext.getRequest();
  33.         //根据请求对象获取请求参数
  34.         String token = request.getParameter("token");
  35.         // TOO 必须要校验token的有效性
  36.         //权限校验,如果token令牌是有效的,可以进行路由转发,否者需要重新登陆
  37.         if(StringUtils.isBlank(token)){
  38.             //token失败,权限校验失败,必须过滤调当前请求,不能进行路由转发
  39.             requestContext.setSendZuulResponse(false);
  40.             //修改返回提示信息
  41.             requestContext.setResponseStatusCode(HttpStatus.FORBIDDEN.value());
  42. //            requestContext.setResponseBody(HttpStatus.FORBIDDEN.getReasonPhrase());
  43.             requestContext.setResponseBody("token令牌校验失败,请求非法,被拦截");
  44.             //设置响应的内容格式,防止中文乱码
  45.             HttpServletResponse response = requestContext.getResponse();
  46.             response.setContentType("text/html;charset=utf-8");
  47.         }
  48.         //返回RequestContext 对象
  49.         return requestContext;
  50.     }
  51. }
复制代码
2.6.2  测试


3、Config配置中心

3.1 模块介绍


3.2 conf-sever  配置服务端

3.2.1 依赖
  1. <dependency>
  2.     <groupId>org.springframework.cloud</groupId>
  3.     <artifactId>spring-cloud-starter-eureka</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>org.springframework.cloud</groupId>
  7.     <artifactId>spring-cloud-config-server</artifactId>
  8. </dependency>
复制代码
3.2.2 配置信息 application.yml
  1. # 端口
  2. server:
  3.   port: 8101
  4. # 服务名
  5. spring:
  6.   application:
  7.     name: edocmall-conf-server
  8.   # 指定环境,适用于本地环境配置,即:将公共配置中心内部文件作为公共配置文件,提供给客户端使用
  9. #  profiles:
  10. #    active: native
  11. # git 仓配置信息
  12.   cloud:
  13.     config:
  14.       server:
  15.         git:
  16.           uri: https://gitee.com/wangsong_huayu/kh96-conf-server.git
  17.           username: username
  18.           password: password
  19. # eureka 注册中心的配置
  20. eureka:
  21.   client:
  22.     service-url:
  23.       defaultZone: http://127.0.0.1:8096/eureka
复制代码
3.2.3 主启动类上的注解
  1. @EnableEurekaClient  //config服务端注册到eureka注册中心
  2. @EnableConfigServer  //开启 congfig 配置中心服务端
复制代码
3.2.4  本地公共配置 config-native.properties
  1. # 自定义公共配置
  2. 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 依赖
  1. <dependency>
  2.     <groupId>org.springframework.cloud</groupId>
  3.     <artifactId>spring-cloud-starter-eureka</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>org.springframework.cloud</groupId>
  7.     <artifactId>spring-cloud-starter-config</artifactId>
  8. </dependency>
复制代码
3.3.2 配置信息application.yml
  1. # 端口
  2. server:
  3.   port: 8102
  4. # 服务名
  5. spring:
  6.   application:
  7.     name: edocmall-conf-client
复制代码
3.3.3 配置信息 bootstrap.properties
  1. # 什么时候使用此配置文件
  2. # 1、当使用SpringCloud的config配置中心时,在客户端需要注册到eureka注册中心时,eureka配置信息必须增加在此文件中,才会生效
  3. # 2、当配置信息不能被其它的配置文件覆盖时,可以将内容配置到此文件中,优先级高于application(云可以遮住太阳)
  4. # config客户端,配置eureka注册中心
  5. eureka.client.service-url.defaultZone=http://127.0.0.1:8096/eureka
  6. # config客户端,开启主动发现eureka注册中心上 注册的config配置中心服务端,默认是关闭的,必须手动开
  7. spring.cloud.config.discovery.enabled=true
  8. # config客户端,指定eureka注册中心上注册的config配置中心服务端的服务名
  9. spring.cloud.config.discovery.service-id=edocmall-conf-server
  10. # 读取本地 配置配置文件
  11. # config客户端,指定从config配置中心服务端读取 本地 的公共配置文件名,注意:不需要加后缀,只要文件名
  12. #spring.cloud.config.name=config-native
  13. # 读取远程配置文件
  14. # config客户端,指定从 config配置中服务端读取的文件名,对应远程创库文件名 符号 - ,前面的名称
  15. spring.cloud.config.name=config
  16. # config客户端,指定从 config配置中服务端读取的文件名,对应远程创库文件名 符号 - ,后面的名称
  17. spring.cloud.config.profile=dev
  18. # config客户端,指定从 config配置中服务端读取 对应git远程仓库中配置所在的分支名,默认是master主线分支,也可以指定其他分支
  19. spring.cloud.config.label=master
复制代码
3.3.4 请求方法
  1. //测试读取config配置中心服务端提供的公共配置信息
  2. @RestController
  3. public class ConfigClientController {
  4.     @Value("${kh96.conf.server:kh96-conf-client-native}")
  5.     private String kh96ConfigServer;
  6.     // 客户端,测试读取服务端的公共配置信息
  7.     @GetMapping("/testConfigServer")
  8.     public String testGetPropertiesFromConfServer(){
  9.         return kh96ConfigServer;
  10.     }
  11. }
复制代码
3.3.5 主启动类上的注解
  1. @EnableEurekaClient
复制代码
3.4 测试

3.4.0 配置服务端与配置客户端


3.4.1 本地公共配置读取


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






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

滴水恩情

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表