基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

目录
  • 1.全链路监控的概念
  • 2.pinpoint链路监控组件的介绍
  • 3.使用docker部署pinpoint监控组件
  • 4.在微服务中集成pinpoint-agent
    • 4.1.pinpoint-agent的接入方式
    • 4.2.配置pinpoint-agent
    • 4.3.修改每个微服务程序的Dockerfile接入pinpoint-agent
    • 4.4.先将product商品服务接入到pinpoint观察效果
    • 4.5.将所有的微服务接入到pinpoint系统
  • 5.pinpoint监控系统简单使用
    • 5.1.查看程序代码类之间是怎么调用其他微服务的
    • 5.2.查看微服务的JVM监控信息

基于Pinpoint对SpringCloud微服务项目实现全链路监控

1.全链路监控的概念

随着微服务架构的流行,服务按照不同的纬度进行拆分,一次请求往往需要设计到多个微服务程序,这些服务可能使用不同的编程语言开发,不同的团队开发,可能部署很多歌副本,因此就需要一些可以帮助理解系统行为,用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这个工具就是全链路监控组件。

全链路监控组件可以监控每个微服务程序之间通信的一个数据指标,可以帮助运维好很好的分析一个请求时如何转发到各个微服务之间以及微服务之间的调度。

全链路性能监控,从整体纬度到局部纬度展示各项指标,将跨应用的所有调度链性能信息几种展现,方便度量整体和局部的性能,并且方面找到故障产生的源头,生产上可以极大缩短故障的排除时间。

全链路监控解决的问题:

  • 请求链路追踪

通过监控可以分析服务之间的调用关系,绘制运行时的拓扑信息,可视化展示。

  • 调用情况衡量

各个调用环节的性能分析,例如吞吐量、响应时间、错误次数

  • 容器规划参考

根据监控数据的分析,可以及时的对微服务进行扩容/缩容、服务降级、流量控制

  • 运行情况反馈

通过监控数据和业务日志快速定位错误信息

全链路监控工具有很多种,应该从下面几种方面去选择

  • 探针的性能消耗

全链路监控工具都需要开启一个探针才能对微服务的链路进行监控,因此我们要选择对服务的影响尽可能的少、数据分析的要快,性能占用小的工具。

  • 代码的侵入性

部分的链路监控工具还需要在应用程序的代码中集成,我们应该选择尽可能不改业务程序代码的同时也能把微服务监控起来的工具,减少开发人员的负担。

  • 监控纬度

监控的数据要全方面、要到位、监控指标越多越好。

  • 可扩展性

工具可以支持分部署部署,具备良好的扩展性。

主流的链路监控工具由zipkin、skywalking、pinpoint。

2.pinpoint链路监控组件的介绍

pinpoint是一个APM(应用程序性能管理)的工具,适用于JAVA/PHP编写的大型分布式系统。

pinpoint的特性:

  • 服务地图(serverMap):通过可视化分布式系统的模块和他们之间的相互来展示系统拓扑,点击某个节点会展示该模块的详情,比如当前的状态和请求数量。
  • 实时活动性线程图(Realtime Active Thread Chart):实时监控应用内部的活动线程。
  • 请求响应分布图(Request/Response Scatter Chart):长期可视化请求数量和应答模式来定位潜在问题。
  • 调用栈(CallStack):在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点检查器(Inspector):查看应用上的其他详细信息,比如CPU使用率、内存/垃圾回收、TPS和JVM参数。

pinpoint架构

pinpoint agent会部署在程序服务器上,程序启动时会指定agent服务,由pinpoint collector获取微服务之间的链路监控,然后存储在Hbase数据库中,pinpoint web ui展示监控数据。

3.使用docker部署pinpoint监控组件

pinpoint托管在github上,拉取镜像非常慢,可以从百度网盘上获取。

pinpoint对docker-compose的版本也要要求,最好在1.25版本以上。

1.下载docker-compose
# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
# chmod a+x /usr/local/bin/docker-compose 

2.下载pinpoint docker部署安装包
# wget https://codeload.github.com/pinpoint-apm/pinpoint-docker/zip/refs/tags/1.8.5

3.部署pinpoint
# unzip pinpoint-docker-1.8.5.zip
# docker-compose pull && docker-compose up -d

4.如果网速不行,就采用下载的方式部署
#导入pinpoint镜像
[root@binary-k8s-node2 ~]# cd pinpoint-image/
[root@binary-k8s-node2 pinpoint-image]# for i in `ls`; do docker load -i $i; done
#部署pinpoint
[root@binary-k8s-node2 ~]# unzip pinpoint-docker-1.8.5.zip >/dev/null
[root@binary-k8s-node2 ~]# cd pinpoint-docker-1.8.5/
[root@binary-k8s-node2 pinpoint-docker-1.8.5]# docker-compose up -d
Creating pinpoint-docker-185_zoo2_1 ... done
Creating pinpoint-flink-jobmanager  ... done
Creating pinpoint-docker-185_zoo1_1 ... done
Creating pinpoint-hbase             ... done
Creating pinpoint-mysql             ... done
Creating pinpoint-docker-185_zoo3_1 ... done
Creating pinpoint-flink-taskmanager ... done
Creating pinpoint-collector         ... done
Creating pinpoint-web               ... done
Creating pinpoint-agent             ... done
Creating pinpoint-quickstart        ... done

[root@binary-k8s-node2 pinpoint-docker-1.8.5]# docker-compose ps

pinpoint-web容器提供页面展示,已经将容器的8080端口映射成了8039端口,直接访问8079端口即可。

pinpoint自带了一个quickapp的展示模板

4.在微服务中集成pinpoint-agent

4.1.pinpoint-agent的接入方式

Tomcat方式接入pinpoint-agent方式
需要修改bin/catalina.sh脚本
CATALINA_OPTS="$CATALINA_OPTS -javaagent:"$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId="$AGENT_ID"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName="$APPLICATION_NAME"

java -jar启动程序的方式如下
直接在启动命令中增加即可
java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=$AGENT_ID
-Dpinpoint.applicationName=$APPLICATION_NAME xxx.jar

-javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar			#agent程序的的jar包
-Dpinpoint.agentId=$AGENT_ID					#程序计入pinpoint的一个id号,每个微服务副本节点都要求唯一
-Dpinpoint.applicationName=$APPLICATION_NAME				#应用组名,一个相同的微服务他们的应用组名要保持一样

下载pinpoint-agent程序

点击设置—>installation

https://github.com/pinpoint-apm/pinpoint/releases/download/1.8.5/pinpoint-agent-1.8.5.tar.gz

4.2.配置pinpoint-agent

配置pinpoint-agent,然后将pinpoint-agent目录拷贝到每一个微服务的程序代码目录中。

1.下载pinpoint-agent
[root@binary-k8s-master1 ~]# wget https://github.com/pinpoint-apm/pinpoint/releases/download/1.8.5/pinpoint-agent-1.8.5.tar.gz

2.配置pinpoint
[root@binary-k8s-master1 ~]# vim pinpoint-agent/pinpoint.config
profiler.collector.ip=192.168.20.13				#指定pinpoint collector组件的IP地址

3.将pinpoint拷贝到每个微服务的代码目录中
[root@binary-k8s-master1 ~]# cp -rp pinpoint-agent springcloud/simple-microservice-dev1/{eureka-service,gateway-service,portal-service}
[root@binary-k8s-master1 ~]# cp -rp pinpoint-agent springcloud/simple-microservice-dev1/product-service/product-service-biz/
[root@binary-k8s-master1 ~]# cp -rp pinp springcloud/simple-microservice-dev1/stock-service/stock-service-biz/
[root@binary-k8s-master1 ~]# cp -rp pinpoint-agent springcloud/simple-microservice-dev1/stock-service/stock-service-biz/

4.3.修改每个微服务程序的Dockerfile接入pinpoint-agent

修改每个微服务程序的Dockerfile,将pinpoint的程序目录拷贝到容器中,然后在程序的启动命令中加上pinpoint-agent参数,接入pinpoint,其中-Dpinpoint.agentId字段的值采用pod的名称来定义,Dpinpoint.applicationName字段的值采用simple-服务名称来定义。

eureke-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim eureka-service/Dockerfile
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/eureka-service -p
COPY ./target/eureka-service.jar /data/simple-microservice/eureka-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-eureka -Deureka.instance.hostname=${MY_POD_NAME}.eureka-service.simple-ms /data/simple-microservice/eureka-service/eureka-service.jar > /data/simple-microservice/eureka-service/eureka-service.log & \ntail -f /data/simple-microservice/eureka-service/eureka-service.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh

############################################
java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-eureka -Deureka.instance.hostname=${MY_POD_NAME}.eureka-service.simple-ms /data/simple-microservice/eureka-service/eureka-service.jar

gateway-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim gateway-service/Dockerfile
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/gateway-service -p
COPY ./target/gateway-service.jar /data/simple-microservice/gateway-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-gateway /data/simple-microservice/gateway-service/gateway-service.jar > /data/simple-microservice/gateway-service/gateway-service.log & \ntail -f /data/simple-microservice/gateway-service/gateway-service.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh

############################################
java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-gateway /data/simple-microservice/gateway-service/gateway-service.jar

order-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim order-service/order-service-biz/Dockerfile
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/order-service -p
COPY ./target/order-service-biz.jar /data/simple-microservice/order-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-order  /data/simple-microservice/order-service/order-service-biz.jar > /data/simple-microservice/order-service/order-service-biz.log & \ntail -f /data/simple-microservice/order-service/order-service-biz.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh

############################################
java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-order  /data/simple-microservice/order-service/order-service-biz.jar

portal-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim portal-service/Dockerfile
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/portal-service -p
COPY ./target/portal-service.jar /data/simple-microservice/portal-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-portal /data/simple-microservice/portal-service/portal-service.jar > /data/simple-microservice/portal-service/portal-service.log & \ntail -f /data/simple-microservice/portal-service/portal-service.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh

############################################
java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-protal /data/simple-microservice/portal-service/portal-service.jar

product-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim product-service/product-service-biz/Dockerfile
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/product-service -p
COPY ./target/product-service-biz.jar /data/simple-microservice/product-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-product /data/simple-microservice/product-service/product-service-biz.jar > /data/simple-microservice/product-service/product-service-biz.log & \ntail -f /data/simple-microservice/product-service/product-service-biz.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh

############################################
java -jar -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-product /data/simple-microservice/product-service/product-service-biz.jar

stock-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim stock-service/stock-service-biz/Dockerfile
FROM 192.168.20.11/base/centos-java:v1
RUN mkdir /data/simple-microservice/stock-service -p
COPY ./target/stock-service-biz.jar /data/simple-microservice/stock-service/
COPY pinpoint-agent /pinpoint-agent
RUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-stock /data/simple-microservice/stock-service/stock-service-biz.jar > /data/simple-microservice/stock-service/stock-service-biz.log & \ntail -f /data/simple-microservice/stock-service/stock-service-biz.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.sh
EXPOSE 8080
ENTRYPOINT /data/entrypoint.sh

java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-stock /data/simple-microservice/stock-service/stock-service-biz.jar

4.4.先将product商品服务接入到pinpoint观察效果

我们接入pinpoint的Dockerfile已经写好,直接使用脚本将produce重新部署一下即可。

sh deploy_k8s.sh product-service
[root@binary-k8s-master1 k8s]# kubectl get pod -n simple-ms
NAME                       READY   STATUS    RESTARTS   AGE
eureka-0                   1/1     Running   1          6d17h
eureka-1                   1/1     Running   0          6d17h
eureka-2                   1/1     Running   1          6d17h
gateway-7bb79fdbc4-vvnct   1/1     Running   0          6d11h
order-6694f4c474-rg7kw     1/1     Running   0          6d17h
portal-697fdf95dd-ml86k    1/1     Running   0          6d16h
product-847bb6d9fc-cs692   1/1     Running   0          10m						#重新部署
stock-6cf98bb445-l8gxb     1/1     Running   0          6d19h

product部署好之后在portal门户网站上购买一个商品,产生product商品微服务的请求,观察pinpoint上的链路状态。

product商品微服务下单之后会调用stock库存微服务,stock微服务还没有接入到pinpoint中,所以在看pinpoint上链路监控时,就会发现stock只会以ip的形式展示。

可以在链路监控视图中看到服务之间调用请求的次数,以及是如何调用的。

4.5.将所有的微服务接入到pinpoint系统

Dockerfile已经调整好,只需要执行咱们写好的部署脚本,将所有的微服务根据最新的Dockerfile制作出最新的镜像,然后在K8S集群中重新部署一下即可。

deploy_k8s脚本不跟任何位置参数就表示将所有的微服务程序全部更新部署。

[root@binary-k8s-master1 k8s]# sh deploy_k8s.sh

在门户网站中购买两个商品观察微服务之间的调用。

5.pinpoint监控系统简单使用

在监控视图的右侧可以选择不同的微服务副本节点、程序之间的调用、请求成功失败的次数

5.1.查看程序代码类之间是怎么调用其他微服务的

1)点击view servers可以随机切换各个副本节点

2)点击右侧最上面的统计图,然后找到图中的小点,选中这个小点就会跳转到代码调用的页面

3)选中完之后会立即跳转,然后点击该请求

请求成功的监控内容

请求失败的监控内容

4)这里还会有比之前更丰富的视图

5)点击mixed view会看到更加丰富的展示视图

请求成功的

请求失败的

5.2.查看微服务的JVM监控信息

1)点击inspector

2)选择指定的副本节点

这些名称都是通过在启动命令中加的-Dpinpoint.agentId=${HOSTNAME}参数生效的

到此这篇关于基于Pinpoint对SpringCloud微服务项目实现全链路监控的文章就介绍到这了,更多相关Pinpoint全链路监控内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot集成Zipkin实现分布式全链路监控

    Zipkin 简介 Zipkin is a distributed tracing system. It helps gather timing data needed to troubleshoot latency problems in service architectures. Features include both the collection and lookup of this data. If you have a trace ID in a log file, you ca

  • 基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

    目录 1.全链路监控的概念 2.pinpoint链路监控组件的介绍 3.使用docker部署pinpoint监控组件 4.在微服务中集成pinpoint-agent 4.1.pinpoint-agent的接入方式 4.2.配置pinpoint-agent 4.3.修改每个微服务程序的Dockerfile接入pinpoint-agent 4.4.先将product商品服务接入到pinpoint观察效果 4.5.将所有的微服务接入到pinpoint系统 5.pinpoint监控系统简单使用 5.1.

  • SpringCloud基于RestTemplate微服务项目案例解析

    目录 基于RestTemplate微服务项目 一.构建父工程 二.构建serverspringcloud-api(公共子模块) 三.创建部门微服务提供者 四.创建部门微服务消费者 五.总结 基于RestTemplate微服务项目 在写SpringCloud搭建微服务之前,我想先搭建一个不通过springcloud只通过SpringBoot和Mybatis进行模块之间额通讯.然后在此基础上再添加SpringCloud框架. 下面先对案例做个说明 该项目有一个maven父模块,其中里面有三个子模块:

  • SpringCloud微服务开发基于RocketMQ实现分布式事务管理详解

    目录 消息队列实现分布式事务原理 RocketMQ的事务消息 代码实现 基础配置 发送半消息 执行本地事务与回查 Account-Service消费消息 测试 小结 消息队列实现分布式事务原理 首先让我们来看一下基于消息队列实现分布式事务的原理方案. 柔性事务 发送消息的服务有个OUTBOX数据表,在进行INSERT.UPDATE.DELETE 业务操作时也会给OUTBOX数据表INSERT一条消息记录,这样可以保证原子性,因为这是基于本地的ACID事务. OUTBOX表充当临时消息队列,然后我

  • SpringCloud微服务基础简介

    一.什么是Spring Cloud? SpringCloud 对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性.可靠.协调的应用程序. SpringCloud 是在SpringBoot的基础上构建的,使开发者可以轻松入门并快速提高工作效率. SpringCloud 提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件. SpringCloud 为开发人

  • SpringCloud 微服务最佳开发实践

    现在基于SpringCloud的微服务开发日益流行,网上各种开源项目层出不穷.我们在实际工作中可以参考开源项目实现很多开箱即用的功能,但是必须要遵守一定的约定和规范. 本文结合我们实际的开发中遇到的一些问题整理出了一份微服务开发的实践规范,欢迎各位大佬拍砖指点. Maven规范 1.所有项目必须要有一个统一的parent模块 所有微服务工程都依赖这个parent,parent用于管理依赖版本,maven仓库,jar版本的统一升级维护 在parent下层可以有 core,starter,rate-

  • SpringCloud微服务熔断器Hystrix使用详解

    目录 什么是Hystrix Hystrix实战 总结 什么是Hystrix 在日常生活用电中,如果我们的电路中正确地安置了保险丝,那么在电压异常升高时,保险丝就会熔断以便切断电流,从而起到保护电路安全运行的作用. 在货船中,为了防止漏水和火灾的扩散,一般会将货仓进行分割,避免了一个货仓出事导致整艘船沉没的悲剧,这就是舱壁保护机制. Hystrix提供的熔断器也类似,在调用某个服务提供者时,当一定时间内请求总数超过配置的阈值,且窗口期内错误率过高,那Hystrix就会对调用请求熔断,后续的请求直接

  • 浅谈Spring Boot 微服务项目的推荐部署方式

    如果开发过spring boot的程序,应该都知道,使用spring boot官方的maven打包插件(spring-boot-maven-plugin) 来打包,打出来的jar包一般有40M以上. 如果公司的服务器上传带宽不高,那么手动上传一个jar或者jenkins部署一次jar,都是非常痛苦的........ 但是,如果打包的时候不引入lib,那么打出来的jar包一般只有几十k而已,非常小,想怎么传就怎么传......... 本文会提供一个bash启动脚本,只需要稍做更改,即可适应你的程序

  • SpringCloud微服务之Hystrix组件实现服务熔断的方法

    一.熔断器简介 微服务架构特点就是多服务,多数据源,支撑系统应用.这样导致微服务之间存在依赖关系.如果其中一个服务故障,可能导致系统宕机,这就是所谓的雪崩效应. 1.服务熔断 微服务架构中某个微服务发生故障时,要快速切断服务,提示用户,后续请求,不调用该服务,直接返回,释放资源,这就是服务熔断. 熔断生效后,会在指定的时间后调用请求来测试依赖是否恢复,依赖的应用恢复后关闭熔断. 2.服务降级 服务器高并发下,压力剧增的时候,根据当业务情况以及流量,对一些服务和页面有策略的降级(可以理解为关闭不必

  • springcloud微服务之Eureka配置详解

    Eureka注册中心/服务发现框架 Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能. Eureka包含两个组件:Eureka Server和Eureka Client. Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Serve

  • SpringCloud 微服务数据权限控制的实现

    目录 一. 整体架构 二. 实现流程 三. 实现步骤 1. 注解实现 2. 注解使用 3. 实现AuthStoreSupplier 4. 实现AuthQuerySupplier 5. 开启数据权限 四. 综述 五.源代码 举个例子: 有一批业务员跟进全国的销售订单.他们被按城市进行划分,一个业务员跟进3个城市的订单,为了保护公司的业务数据不能被所有人都掌握,故每个业务员只能看到自己负责城市的订单数据.所以从系统来讲每个业务员都有访问销售订单的功能,然后再需要配置每个业务员负责的城市,以此对订单数

随机推荐