美文网首页
Spring could 学习随笔巩固记忆

Spring could 学习随笔巩固记忆

作者: 朔寒闻苦角 | 来源:发表于2020-05-13 12:00 被阅读0次


spring cloud:

    父工程:整个微服务集群统一套壳 除了pom.xml 没有其他代码

        微服务包括但不限于以下类型:

        1.eureka服务器发现,有启动类和yaml,pom(集成eureka-server依赖)

        2.服务端:service接口 数据库crud提供者 有mybatis组件

            (集成eureka-client依赖 如果用server会导致返回xml不是json)

        3.客户端:消费者或者使用者 没有sql代码 mybatis组件之类的

            (集成eureka-client依赖 如果用server会导致返回xml不是json)

Eureka(找到了): 

                注册服务组件;分发注册微服务,分为Eureka Server和Eureka Client ;一般来说Eureka Server要注册两个以上做集群互相注册,保活

Ribbon(勋带):LB,

            即负载均衡(Load Balance);轮训,加权值

            1.新加一个负载均衡提供客户端 需要重启80实例才能找到新客户端

            2.在需要json返回地方 引入eureka 一定要client端spring-cloud-starter-netflix-eureka-client

                  如果引入client端spring-cloud-starter-netflix-eureka-server端接口会返回xml;

                  (Eureka Client - 服务端/提供者)就可以集成不同数据库(可能还有不同开发语言),多个注册完成负载均衡

feign(假装):

    另一种负载均衡,面向接口的实现方式;相当于Ribbon的升级版

        对 Feign 进行了封装,Feign 默认集成了 Ribbon 实现了客户端负载均衡调用

        在(Eureka Client - 客户端/消费者):

                1. 通过微服务名称,获得服务的调用地址

                2. 通过接口+注解,获得服务的调用 ——Feign (为适应业界其它程序员提出的,还是遵循面向接口编程)

        SpringCloud对Feign进行了增强兼容了SpringMVC的注解 ,我们在使用SpringMVC的注解时需要注意:

                1、!!!@FeignClient接口方法有基本类型参数在参数必须加@PathVariable("XXX") 或 @RequestParam("XXX")

                2、!!!@FeignClient接口方法返回值为复杂对象时,此类型必须有无参构造方法。

Hystrix:熔断器(断路器)

        ,类似保险丝;在业务出错throws 或者 某一个微服务崩溃时的 雪崩效应 默认返回处理 止损用

        1.服务端熔断:

                a.spring-cloud-starter-netflix-hystrix 依赖

                b.yaml=> eureka => instance-id: ${spring.application.name}:${server.port}-hystrix

                c. @HystrixCommand(fallbackMethod = "getFallBack")方法上加入

                d. public Product getFallBack(@PathVariable("id") Long id) 实现方法

        2.客户端消费者熔断(feign):

                a.yaml => feign.hystrix.enabled: true

                b.@FeignClient(value = "babosa-product",fallback = ProductClientServiceFallBack.class)

                     接口类上注释fallback属性

                c.@Component public class ProductClientServiceFallBack implements ProductClientService

                     完成实现类 加@Component 标注组件 并实现feign接口

                d.对方法 public Product get(@PathVariable("id") Long id) { return null/others }

                     实现即是错误熔断应对返回值了

                pis:feign 强兼容 springmvc 所以public Product get(@PathVariable("id") Long id) 连  

                   @PathVariable("id")都要一模一样(feign知识点)

        熔断监控:

            1.做一个熔断微服务spring-cloud-starter-netflix-hystrix-dashboard依赖

            2.在需要监控的服务中yaml management:endpoints:web:exposure:include: hystrix.stream

                 spring-boot-starter-actuator依赖

            3.http://熔断微服务地址:端口/hystrix 进入

                 输入 http://呗监控服务地址:端口/actuator/hystrix.stream  title 起名即可

Zuul(粗鲁):路由, 1.路由分发, 2.接口过滤

    1.正常配置spring-cloud-starter-netflix-zuul pom 即可用路由分发

    2.配置yaml zuul:routes:"路由器名" 然后path/serviceId/stripPrefix 即可使用接口过滤

    3.自定义一个@Component 组件标识的Filter 继承 ZuulFilter 实现对应方法即可

         a==>filterType:返回字符串代表过滤器的类型,返回值有:

           1.pre:在请求路由之前执行

            2.route:在请求路由时调用

            3.post:请求路由之后调用, 也就是在route和errror过滤器之后调用

            4.error:处理请求发生错误时调用

        b==>filterOrder:此方法返回整型数值,通过此数值来定义过滤器的执行顺序,数字越小优先级越高。

        c==>shouldFilter:返回Boolean值,判断该过滤器是否执行。返回true表示要执行此过虑器,false不执行。

        d==>run:过滤器的业务逻辑。(类似加密,token验证可以在这里做)

Spring Cloud 分布式配置中心:

        每个微服务自已带着一个 application.yml,上百个配置文件的管理起来就很麻     烦,在Spring Cloud中,有分布式配置中心组件Spring Cloud Config来解决这个     问题,通过将配置信息同步到git上来实现

1.服务端 config server:分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客 户端提供获取配置信息,加密、解密信息等访问接口。

配置服务端一个分部管理一个或者多个客户端使用,所以在application.yml 中配置并且uri是git库地址

        依赖 spring-cloud-config-server

microservice-cloud-11-config-server-5001 ===> pom

    name: babosa-microservice-config #自己起的以后要用

microservice-cloud-11-config-server-5001 ===> aplication

2.客户端 config client:通过指定的服务端来管理服务的资源,以及与业务相关的配置内容,并在启动       的时候从服务端获取和加载配置信息。

config-client-controller读取信息

    bootstrap.yml配置 config

         git分支: https://github.com/zffjll/babosa-cloud-config/blob/master/babosa-microservice-config-eureka.yml

    application.yml配置client姓名

3. 配置Eureka 服务端发现

pom 启动项

 git分支:https://github.com/zffjll/babosa-cloud-config/blob/master/babosa-microservice-config-eureka.yml

bootstrap.yml application.yml

4.正常的消费/使用端 : 

pom1 pom2

git分支:https://github.com/zffjll/babosa-cloud-config/blob/master/babosa-microservice-config-product.yml 

bootstrap  application yml 正常的使用mybatis

经过上述可以发现除了核心分布配置服务中application 设置了git uri外 其余项目均除了设置yml服务器名称外 均以bootstrap放心 加载了git中心管理application.yml配置

Spring Cloud Bus 消息总线组件

     在分布配置中心由git管理了 配置之后,如果想不重启微服务的情况下修改这些配置,就要用消息通知 mq广播通知更新

Spring Cloud Bus 被国内很多都翻译为消息总线。大家可以将它理解为管理和传播所有分布式项目中的消息即可,

其实本质是利用了MQ的广播机制在分布式的系统中传播消息,目前常用的有Kafka和RabbitMQ。

根据此图我们可以看出利用Spring Cloud Bus做配置更新的步骤:

1、提交配置后发送post方式的/bus-refresh请求给Confifig客户端

2、Confifig客户端接收到请求从Server端更新配置并且发送消息给消息总线

3、消息总线接到消息并通知给其它客户端

4、其它客户端接收到通知,请求Server端获取最新配置

5、全部客户端均获取到最新的配置

这里涉及 Postman测试工具安装/ RabbitMQ  类似框架

pom依赖

bootstrap配置

修改git中的babosa-microservice-product-config-rabbitMQ-bus1 刷新Eureka没有反应

postman 发送信息激活配置

成功

再git 配置中类emp属性该如何动态获取:

git中加入

发post信息推送没有更新 还是获取不到

给controller加@RefreshScope //可以用bus 同步 即可

成功

如果想在git配置中动态更改书库路 按属性更改不行 是因为使用了druid连接池

自定义连接池配置即可:

配置之后 将git 中datasource库更改 03 发送消息推送 

    

动态配置成功

相关文章

网友评论

      本文标题:Spring could 学习随笔巩固记忆

      本文链接:https://www.haomeiwen.com/subject/ewvgnhtx.html