当前位置: 首页 > article >正文

SpringCloud学习:Micrometer链路追踪 + GateWay网关

SpringCloud学习:Micrometer链路追踪 + GateWay网关

文章目录

  • SpringCloud学习:Micrometer链路追踪 + GateWay网关
  • 1. Micrometer + Zipkin(分布式链路追踪)
    • 1. 概述
    • 2. 为什么要有链路追踪
    • 3. 分布式链路追踪原理
    • 4. Zipkin:图形化展示界面
    • 5. 实战:Micrometer数据收集 + Zipkin数据展示
  • 2. Gateway网关:统一的API路由管理方式:路由Route、断言Predicate、过滤Filter
    • 1. 概述:整个微服务架构的入口程序
    • 2. Gateway三大核心:Route、Predicate、Filter
    • 3. Gateway的工作流程:路由转发+断言判断+执行过滤器链(Pre、Post)
    • 4. 入门配置
    • 5. 9527网关如何做路由映射

1. Micrometer + Zipkin(分布式链路追踪)

1. 概述

sleuth的替代版本:Micrometer主要负责链路数据的收集,并使用zipkin dashboard进行展示,将一次分布式请求还原成调用链路,进行日志记录性能监控,并在Zipkin上进行展示

2. 为什么要有链路追踪

  1. 分布式链路追踪就是将一次分布式请求还原成调用链路,进行日志记录性能监控
  2. 前端的请求会在后端形成一条复杂的分布式服务调用链路,任何一环出错都会引起整个请求的失败

3. 分布式链路追踪原理

  1. 每个调用链用trace ID标识,spanID标识请求信息,并通过parentID关联各个请求信息的调用关系,通过在span中存放额外信息来实现对请求的监控以及对性能的记录

4. Zipkin:图形化展示界面

  1. 是分布式链路追踪系统图形化工具,将micrometer收集的链路追踪数据可视化展示到web上,使得对数据观看更方便
  2. 下载安装运行
    1. 官网zipkin.io
    2. 运行下载的jar包:java -jar zipkin-xxx.jar

5. 实战:Micrometer数据收集 + Zipkin数据展示

  1. 改POM引入需要的6个依赖,也要同时改父工程的POM来引入正确的版本
  2. 服务调用可能是双向的,故可以提供者和调用者都加上链路追踪,引入相应的POM依赖后只对zipkin进行yml配置即可,micrometer会自动开启链路追踪(将依次请求还原为调用链路)
  3. 改yml,只需要对zipkin进行配置,不需要对MicroMeter进行配置,只需要引入MicroMeter的依赖即可,然后对zipkin在yml中进行配置即可
  4. 改业务类:不需要额外添加注解,只要配置完成即可实现链路追踪并在zipkin中展示
  5. 只需要引入Micrometer依赖,然后配置zipkin的yml配置即可,不需要修改业务类
  6. 测试后就可以在zipkin通过的网站上看到链路追踪信息,前提是运行zipkin的jar包服务调用是通过openfeign进行发起的,故circuitbreaker也要在openfeign的配置中进行开启,所以链路追踪也会追踪到openfeign发出的circuitbreaker请求

2. Gateway网关:统一的API路由管理方式:路由Route、断言Predicate、过滤Filter

1. 概述:整个微服务架构的入口程序

  1. gateway组件的核心是一系列过滤器对请求进行过滤本身也是一种微服务,要进行服务注册,要创建一个gateway微服务,并在Consul中注册,然后在yml中对路由进行配置,此时调用者直接向网关微服务发起相应的请求,有网关微服务进行路由转发
  2. ngix是整个后台服务器的入口,可以进行负载均衡,而consul的负载均衡是在微服务上的
  3. gateway是zuul的替代品,可以实现反向代理,熔断,监控,鉴权,日志监控

2. Gateway三大核心:Route、Predicate、Filter

  • 当一个请求进入网关后,会先判断是否存在对应的路由路由由一系列的过滤器和断言组成,当存在路由时,会根据请求判断断言是否全部成立,只有predicate全部成立后,才会进行转发,且在转发前后要经过过滤器Filter对请求进行处理

3. Gateway的工作流程:路由转发+断言判断+执行过滤器链(Pre、Post)

  • 由 SpringCloudGateway发出请求,然后在Gateway handler Mapping中找到与请求相配的路由,然后将其发送到GatewayWebHanlder,由Hanlder通过指定的过滤链将请求发送到实际的服务执行业务逻辑,过滤器可能在发送请求给实际微服务之前Pre和之后Post执行业务逻辑

4. 入门配置

  1. Gateway也是一个微服务创建后要注册进入Consul中,然后直接在yml中配置路由即可,然后调用者直接调用gateway微服务即可
  2. ngix是对所有进入后台的请求进行负载均衡以及路由转发等操作,而Gateway是对后台内各个微服务之间的请求进行负载均衡和路由转发+断言predicate判断+执行过滤器链等操作
  3. Gateway也是一个微服务建项目、改POM、写yml、主启动(使用@EnableDiscovery注册)、业务类(也要在consul中进行注册,故要引入consul的依赖)
    1. 建项目
    2. 改POM:引入spring-cloud-starter-gateway和consul的依赖(也要在consul中进行注册,故要引入consul的依赖)
    3. 改yml:对consul进行配置,然后配置路由参数(id、url、predicate)
    4. 主启动:在主函数上用@EnableDiscoveryClient注解进行标注以注册进入Consul
    5. 业务类:网关无任何业务只需要将目标微服务提供的公共api接口作为网关的feignclient即可

5. 9527网关如何做路由映射

  1. 使用 @EnableFeignClient(‘微服务名’)注解标注的接口表示可以直接对其对象进行自动装配,并且调用内部方法可以向指定的微服务发出对应的请求,即对该微服务创建了一个feign对象
  2. 微服务内部之间不需要网关直接提供者创建一个公共api接口并创建@FeignClient标注是哪个微服务的公共接口,然后调用者获得对应的接口实现类并调用相应的方法即可
  3. 使用@FeignClient注解对微服务提供的公共接口api进行标注,此时服务调用者可以通过自动装配直接获得实现类,并调用方法实现对微服务的调用
  4. 而对于外部请求,则此时需要加入网关,此时不可直接访问提供者的公共api,而是访问配置了相应路由的微服务所提供的openfeign公共调用接口,使用该接口对象来通过网关调用提供者的方法网关内只需要配置路由目标ip和断言predicate和过滤器,不需要创建controller方法,只需要将提供者所提取的公共api接口的feignclient指定为网关微服务即可
  5. 网关只需要在网关微服务上进行配置路由即可不需要在目标微服务上进行配置,但调用者必须访问网关的ip,网关不需要在调用者上进行配置,而且与提供者也解耦
  6. 路由可以隐真示假,通过配置路由后,此时请求访问路由的ip并指定对应的路径,可以映射到所配置的ip服务器上执行对应的请求,配置路由后,可以通过访问路由而转发到目标服务器,将目标服务器的ip进行隐藏
  7. 网关由一系列路由组成,而路由由请求的url和断言、过滤器组成,故要实现路由转发,则需要配置断言和过滤器,每个路由只负责一个请求(即一个请求地址)

http://www.kler.cn/news/353255.html

相关文章:

  • 最好的ppt模板网站是哪个?做PPT不可错过的18个网站!
  • 关于Docker
  • 构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容器镜像
  • 《重置MobaXterm密码并连接Linux虚拟机的完整操作指南》
  • 【华为HCIP实战课程十七】OSPF的4类及5类LSA详解,网络工程师
  • Java Swing的优秀开源项目学习推荐(UI、数据结构与设计模式)
  • 【每日一题】Leetcode每日一题 - 两数相加
  • Chrome DevTools 一:简介 Console (入门必看)
  • nn.Conv2d(二)
  • 【Vue.js设计与实现】阅读笔记目录(持续更新)
  • 使用scss生成旋转圆圈
  • Python 面向对象编程 (OOP) 深入解析
  • windows10系统-使用自定义字体
  • SPSS 分类模型实训步骤 (以 Logistic 回归为例)
  • 单链表和双向链表区别 and 双向链表的增删改查!
  • GC1272替代APX9172/茂达中可应用于电脑散热风扇应用分析
  • STM32——USART原理及应用
  • Springboot + zset + lua 实现滑动窗口
  • 【JAVA-数据结构】二叉树
  • 离岗睡岗预警系统 值班室离岗识别系统Python 结合 OpenCV 库
  • 【工具】一些很不错的资源合集
  • 2024百度云智大会|百度大模型内容安全合规探索与实践
  • day11-SpringMVC
  • JavaScript(JS)基础(二)
  • DB2数据库学习(一)
  • Linux 环境chrony设置服务器间时间同步一致