微服务架构第一阶段(nacos,gateWay,RPC)
Posted AD钙钙钙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务架构第一阶段(nacos,gateWay,RPC)相关的知识,希望对你有一定的参考价值。
最近在学习完 springcloud 微服务架构之后,自己用了之前的一个项目计划拆分成微服务的项目,第一阶段要求整合 nacos,RPC以及gateWay,首先来看一下几个技术组件的概念
RPC
RPC 框架 —— 远程过程调用协议RPC(Remote Procedure Call Protocol)—— 允许像本地服务一样调用远程服务
RPC是指远程过程调用,也就是说两台服务器 A,B,一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数 / 方法,由于不在一个内存空间,不能直接调用,需要通过网络表达调用的语义和传达的调用的数据,那么有一下几个问题
第一,首先,要解决服务之间的通信问题,主要通过客户端和服务之间建立 TCP 连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享一个连接。
第二,要解决寻址问题,也就是说,A 服务器上的应用怎么告诉底层 RPC 框架,如何连接到 B 服务器以及特定端口,这样才能完成调用。
第三,当 A 服务器上的应用发起远程调用时,方法的参数需要通过底层的网络协议如 TCP 传递到 B 服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化或编组,通过寻址和传输将序列化的二进制发送给 B 服务器。
第四,B 服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。
第五,返回值还要发送回服务器 A 上的应用,也要经过序列化的方式发送,服务器 A 接到后,在反序列化,恢复为内存中的表达方式,交给服务器上的应用
nacos
- Nacos 是 SpringcloludAlibaba 架构中的重要组件
- 是一个更易于帮助构建云原生应用的动态服务发现,配置和服务管理平台,提供注册中心等功能
- 在服务中配置好 nacos 之后可以在页面中可视化的监控到服务
- 具体 nacos 可以参考官方文档 nacos官方文档
gateWay
在 微服务 架构中,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发以及管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平台无关的服务协议作为各个单元间的通讯方式
API 网关的定义
网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务之前的系统,用来管理授权,访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性地基础设施
最重要地几个概念
具体在项目中的实施
第一步 分析项目,拆分模块
我们首先将项目进行模块化的划分,划分如下
electronic-admin —— 业务:管理员模块
electronic-common —— 系统公共模块
electronic-data —— 业务:数据大屏模块
electronic-gateway —— GateWay 路由网关
electronic-openid —— 业务:微信模块
electronic-praise —— 业务:祝福模块
electronic-healthinfo —— 业务:健康码模块
electronic-student —— 业务:用户模块
第二部 编写配置文件,启动各个模块
编写 yml 配置文件
业务模块
server:
port: 8985 # 模块端口号
max-http-header-size: 20480
spring:
application:
name: API-XXXX # 模块名称,此模块名称将会在 nacos 中显示出来
cloud:
nacos:
server-addr: xx.xx.xx.142:8848 # nacos 配置服务地址
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 连接数据库
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/xxxxxx?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: ******
上面是最基本的业务模块的配置
gateWay 网关 yml 配置
server:
port: 8096
spring:
application:
name: API-GATEWAY
cloud:
nacos:
server-addr: xx.xx.xx.142:8848 # 将网关注册到 nacos
gateway:
routes:
- id: admin_router
uri: lb://API-ADMIN # 管理员模块
predicates:
- Path=/api/admin/**
filters:
- id: data_router
uri: lb://API-DATA # 数据大屏模块
predicates:
- Path=/api/ScreenData/**
filters:
- id: student_router
uri: lb://API-STUDENT # 用户模块
predicates:
- Path=/api/students/**, /api/studentsFeign/**
filters:
- id: student_router
uri: lb://API-HEALTH # 健康码模块
predicates:
- Path=/api/health/**
filters:
解释:
url
:使用 uri
是为了匹配后提供服务的路由地址,我们将所有的服务注册到 nacos 之后,通过访问接口 gateWay 就会在nacos 找到对用的服务进行转发
predicates
:断言,路径相匹配的进行路由,这是必须要添加的配置
通过配置 gateWay,最明显的感受就是,我们有多个微服务,那么就会对应多个端口号,在请求接口时如果不配置 gateWay 那么端口号就太多太多,不利于管理。配置 gateWay 服务之后就可以进行统一管理,gateWay 暴露一个端口,然后进行转发,只需要请求gateWay暴露的端口号即可。
服务间的通信
服务间的通信有多种方式,比如 restemplate,openFeign,dubbo等,本次使用的是 OpenFeign。
在开发过程中我们很大程度上需要服务之间的通信,接下来看实现方式
第一步: 引入openfeign 依赖
<!--openfeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
使用 openfeign 需要在服务的启动类上开启 openfeign 使用注解 @EnableFeignClients
这里我们通过 数据大屏 与 用户 之间的通信演示
假设数据大屏中要显示 最近 num 条的用户注册的数据
Data 大数据模块
Controller 层
@GetMapping("/recentData")
public ResponseResult<List<RecentRegisterDataDto>> getRecentData(@RequestParam(defaultValue = "0") int num )
List<RecentRegisterDataDto> studentsServiceRecentData = studentsService.findRecentData(num);
return ResponseResult.ok(studentsServiceRecentData);
Feign:StudentFeign —— 这个可以写在了 service 层
@Component
@FeignClient(value = "API-STUDENT") // 表明是哪个服务的接口
public interface StudentsService
@GetMapping("/api/studentsFeign/recentData")
List<RecentRegisterDataDto> findRecentData(@RequestParam("num") int num);
学生用户模块
在此模块中我们只需要给其开发一个接口即可
@GetMapping("recentData")
public List<RecentRegisterDataDto> findRecentData(@RequestParam("num") int num)
return studentsFeignService.findRecentData(num);
通过这样的方式,就可以实现两个模块之间的通信,在模块通信的过程中,如果有基本类型参数就需要加上 @RequestParam
注解,如果参数是对象的形式,使用 @RequestBody
注解
最基本的将微服务系统正常启动起来就以上所属。
第四阶段面试题微服务(Nacos,Sentinel,Gateway)
文章目录
- Day01 微服务简介
- Day02 Nacos注册中心入门
- Day03 基于nacos实现服务的发现与调用
- Day04 基于Feign方式的服务调用实践
- Day05 Nacos配置中心应用实践
- Day06 Sentinel 限流应用实践
- Day07 Gateway 入门应用实践
- Day08 Gateway 进阶应用实践
Day01 微服务简介
1.核心知识点
- 微服务架构诞生的背景(软件即服务,将一个大型的软件,拆成若干个小系统,分而治之)
- 微服务架构解决方案(大厂基本自研,自己研发各种组件,Spring Cloud Netflix,Alibaba)
- 微服务架构下Maven聚合项目的创建方式(Maven聚合项目 资源复用:extends,import,简化编译,打包,部署方式)
- 微服务架构中聚合工程之间的引用设计(将一个工程作为依赖添加到其他的工程)
2.常见问题分析
- 为什么需要微服务?(对系统分而治之,解决因为并发访问过大带来的系统复杂性(例如:业务,开发,测试,升级,可靠性)
- 微服务设计的特点(单一职责,独立进程,开发测试效率高,可靠性高,升级难度小,但是会带来一定的维护成本)
- 微服务解决方案有哪些(大厂自研,中小型企业采用开源Spring Cloud Alibaba,Spring Cloud Netfix等)
- 微服务设计中需要哪些关键组件(服务的注册与发现,配置,限流降级,访问入口管理,分布式事务管理等等)
- 创建聚合工程的目的(实现工程之间资源的共享,简化工程管理)
- maven工程中build元素的作用(定义项目的编译方式,打包方式)
- maven父工程的packing元素内的值是什么(父工程默认打包方式为pom方式)
- maven父工程中dependencyManagement元素的作用是什么(项目依赖的版本,当前工程或子工程不需要再指定版本)
- maven父工程中如何统一定义JDK编译和运行的版本(配置maven编译插件:maven-compiler-plugin)
Day02 Nacos注册中心入门
1.核心知识点
- 服务中心诞生的背景(服务多了,需要统一的管理)
- 服务注册中心的选型(社区活跃度,稳定性,功能,性能,学习成本)
- 基于nacos实现服务的注册(添加依赖,服务配置,启动服务并检查)
- 基于RestTemplate实现服务的简易调用(服务消费方调用服务提供方)
2.常见问题分析
- 如何理解服务注册中心(存储服务信息的一个服务)
- 服务注册中心诞生的背景(服务多了,需要对服务进行更好的管理)
- 市场上常用的配置中心(Zookeeper,Eureka,Nacos,Consul)
- 如何对注册中心进行选型(社区活跃度,稳定性,功能,性能,学习成本)
- nacos是什么(是Alibaba公司基于SpringBoot技术实现的一个注册中心,本质上也是一个web服务)
- nacos的基本架构(Client/Server架构)
- nacos主要提供了什么核心功能(服务的注册,发现,配置)
- nacos服务单机模式,window平台下启动时的指令是什么(startup.cmd -m standalone)
- 实现nacos服务注册需要添加什么依赖(两个:web,discovery)
- 实现nacos服务注册时,必须做哪些配置(服务名,假如是本机服务注册刻意省略服务地址)
- nacos如何检查服务的状态(通过心跳包实现,服务启动时会定时向nacos发送心跳包-BeatInfo)
- 服务之间进行服务调用时,使用什么API(RestTemplate,用此对象之前要先创建这个对象并交给Spring去管理)
3.面试题
- 为什么要将服务注册到nacos(为了更好地查找这些服务)
- 在nacos中服务的提供者是如何向nacos注册中心续约的(5秒心跳)
- 对于nacos服务来讲他是如何判定服务实例的状态(检测心跳包,15,30)
- 服务的消费方是如何调用服务提供方的服务的(RestTemplate)
- @Bean注解的作用(一般用于配置类的内部,描述相关的方法,用于告诉spring此方法的返回值要交给spring去管理,bean的名字默认为方法名,加入需要指定名字可以@Bean("bean"的名字),最多的应用场景是整合第三方的资源-对象)
- @Autowired注解的作用(此注解用于描述属性,构造方法,set方法等,用于告诉spring框架,按照一定的规则为属性进行DI操作,默认是按照属性,方法参数类型查找对应的对象,加入只找到一个,则直接注入,类型多个时还会按照属性名或者方法参数名进行值的注入,加入名字也不同,就会出现报错)
- nacos中的负载均衡层是如何实现的(通过ribbon实现,ribbon中定义了一些负载均衡的算法,然后基于这些算法从服务实例中获取一个实例为消费方法提供服务)
- ribbon是什么(Netflix公司提供的负载均衡客户端,一般应用与服务的消费方法)
- ribbon可以解决什么问题(基于负载均衡策略进行服务的调用,所有策略都会实现IRule接口)
- ribbon内置的负载均衡策略都有哪些(8种,可以通过查看Irule接口的实现类进行分析)
- @LoadBalanced的作用是什么?(描述RestTemplate对象,用于告诉spring框架,在使用RestTemplate进行服务的调用时,这个调用过程会被一个拦截器进行拦截,然后再拦截器的内部,启动负载均衡策略)
- 我们可以自己定义负载均衡策略吗(可以,基于IRule接口进行策略的定义,也可以参考NacosRule进行实现)
- 为什么使用feign(基于feign可以更加友好的实现服务调用,简化服务消费方对服务提供方的调用)
- @FeignClient注解的作用是什么(告诉Feign Starter,在项目启动时,为此注解描述的接口实现类–代理类)
- Feign方式的调用,负载均衡是如何实现的(Ribbon)
- @EnableFeignClient注解的作用是什么(描述配置类,例如启动类)
Day03 基于nacos实现服务的发现与调用
1.核心知识点
- 负载均衡诞生的背景(网络中有一组可以提供相同服务的计算机)
- 客户端负载均衡&服务端负载均衡的不同?(browser->nginx->…;sca-consumer->sca-provider)
- 基于LoadBalancerClient对象从注册中心获取服务列表(服务发现)
- 基于Ribbon(一个负载均衡的组件,这个组件中提供一套负载均衡算法)实现负载均衡
- @LoadBalanced注解的应用(描述RestTemplate对象,为此对象的远程调用进行赋能)
- 基于Feign方式(声明式)的远程服务调用实战(底层封装了Okhttp,HttpClient等API调用,实现了进一步的抽象)
2.常见问题分析
- 为什么负载均衡(通过多个服务实例均衡处理客户端的请求)
- 如何理解服务的发现?(服务发现就是从注册中心获取服务信息)
- LoadBalancerClient的作用(从nacos注册中心获取服务实例列表,然后本地基于负载均衡算法获得具体的服务实例)
- @Loadbalancerd注解的作用(描述RestTemplate对象,让系统底层为RestTemplate对象赋能,对请求过程进行拦截)
- 有哪些负载均衡策略(基于Irule接口去查看)
- 如何修改负载均衡策略(配置文件,配置类)
- Feign是什么(Spring cloud微服务规范中的一组远程调用API)
- 为什么使用feign(优化服务调用结构)
- 如何使用feign实现服务调用(依赖,@EnableFeignClient,@FeignClient)
- feign方式的服务调用原理(底层基于代理对象实现)
Day04 基于Feign方式的服务调用实践
1.常见问题分析
- 为什么使用feign方式的服务调用(优化结构,简化服务调用过程代码的编写)
- 如何基于feign方式实现远程服务调用(依赖,配置,feign接口的定义)
- @EnableFeignClient注解的作用是什么(描述配置类,例如启动类,用于告诉底层要启动feign start组件)
- @FeignClient注解的作用是什么(告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类–代理类)
- 如何理解基于Feign方式的远程服务调用(声明式远程服务调用–告诉底层做什么,底层封装了服务调用过程)
- Feign方式如何实现负载均衡(feign默认继承ribbon组件实现负载均衡,底层基于ribbon组件实现)
- feign接口指向的对象是谁(实现了接口的一个代理对象)
Day05 Nacos配置中心应用实践
1.常见问题分析
- 什么是配置中心(存储项目配置信息的一个服务,这个服务可以实现配置的动态发布与更新)
- 为什么要使用配置中心(集中管理配置信息,动态发布配置信息)
- 市场上有哪些主流的配置中心(Apollo,nacos)
- 配置中心一般都会配置什么内容(可能经常会变化的配置信息,例如连接池,日志,线程池,限流熔断规则)
- 什么信息一般不会写在配置中心(服务端口,服务名,服务的注册地址,配置中心的地址)
- 项目中为什么要定义bootstrap.yml文件(此文件被读取的优先级比较高,可以在服务启动时读取配置中心的数据)
- nacos配置中心宕机了,我们的服务还可以读取到配置信息吗(可以从服务的本地内存读取)
- 微服务应用中客户端如何感知配置中心的数据变化(1.4x版本的nacos客户端会基于长轮询机制从nacos获取配置信息)
- 服务启动后没有从配置中心获取我们的配置数据是什么原因(依赖,bootstrap.yml,配置单词,格式,配置模型)
- 你项目中使用的日志规范是什么(SLF4J 门面模式)
- nacos配置管理模型的背景(环境不同配置不同)
- Nacos配置中的管理模型是怎样的?(namespace>group>service/data-id)
- nacos客户端(微服务)是否可以读取共享配置
2.面试题
- 什么是配置中心(存储项目配置信息的一个服务)
- 为什么要使用配置中心(集中管理配置信息,动态发布配置信息)
- 市场上有哪些主流的配置中心(Appollo,nacos)
- 配置中心一般都会配置什么内容(可能会经常变化的信息,例如连接池,日志,线程池,限流熔断规则)
- 什么信息一般不会写到配置中心(服务端口,服务名,服务的注册地址,配置中心)
- nacos配置中心宕机了,我们的服务还可以读取到配置信息吗(可以从内存,客户端获取了配置中心的配置信息以后,会将配置信息在本地内存中存储一份)
- 微服务应用中我们的客户端如何获取配置中心的信息(我们的服务一般首先会从内存读取配置信息,同时我们的微服务还可以定时向那次是配置中心请求拉取pull更新的配置信息)
- 微服务应用中客户端如何感知配置中心的数据变化(nacos客户端会基于长轮询机制从nacos获取配置信息,所谓的长轮询就是在没有配置更新时,会在nacos服务端队列进行等待)
- 服务启动后没有从配置中心获取我们配置的数据原因是什么(依赖,配置文件bootstrap.yml,配置中心的dataId名字不正确,分组是否正确,缩进关系,假如是动态发布,类上是否有@RefreshScope注解)
- 项目中的日志级别(debug,info,error…可以基于日志级别控制日志的输出)
- nacos配置管理模型的背景(环境不同配置不同)
- nacos配置中的管理模型是什么(namespace,group,service/data-id)
- nacos客户端(微服务)是否可以读取共享配置(可以)
Day06 Sentinel 限流应用实践
1.核心知识点
- 服务限流,降级的背景(服务的治理)
- Sentinel常用的限流模式(直接,关联->保证核心业务,链路->红绿灯)
- Sentinel降级(熔断)入门实现(出现不稳当的服务系统时,暂停对此服务的访问)
- Sentinel实现热点参数的限流(热点视频,文章…),系统规则配置(CPU的使用率),权限配置(黑白名单)
2.常见问题分析
- 为什么要进行限流,降级(系统的处理能力有限,可以通过限流的方式,保证系统的可靠运行)
- 有哪些Sentinel限流的算法(计数器,令牌桶,漏桶,滑动窗口算法【此为Sentinel的默认算法】)
- @SentinelResource注解的作用,你用过哪些属性(在链路限流中描述资源结点)
- Sentinel中常用的限流效果有哪些(快速失败,预热,排队)
- Sentinel中限流,降级操作时被触发的类型是什么(都是BlockException类型的子类)
- 如何对限流结果进行处理(有默认的处理方案,我们也可以自己定义处理规则—实现BlockExceptionHandler接口)
- Sentinel限流基本管理(底层对服务请求进行拦截,然后通过流控规则限定对资源的访问)
3.面试题
- sentinel是什么(阿里推出的一个流量控制平台,防卫兵)
- 类似sentinel还有什么(hystrix)
- sentinel是如何对请求进行限流的(基于sentinel提供的拦截器)
- 限流算法(计数器,漏桶,令牌桶,滑动窗口)
- sentinel默认的算法是什么(滑动窗口算法)
- sentinel中的阈值应用类型(QPS,线程数)
- sentinel的限流规则中默认有哪些限流的模式(直连,关联,链路)
- sentinel限流的效果有哪些(快速失败,预热,排队)
- 什么是降级熔断(让外部应用停止对服务的访问)
- 为什么要进行熔断(平均响应速度越来越慢或者经常出现异常,这样可能会导致调用链堆积,最终系统崩溃)
- Sentinel中限流,降级的异常父类是什么(BlockException)
- Sentinel出现降级熔断时,系统底层出现的异常是什么(DegradeException)
- Sentinel中异常处理的接口是什么(BlockExceptionHandler)
- Sentinel中异常处理接口下默认的实现类为(DefaultBlockExceptionHandler)
- 我们如何定义Sentinel中的异常处理呢(直接或间接实现BlockExceptionHandler)
- Sentinel熔断降级策略有什么(慢调用比例,异常比例,异常数)
- 如何理解热点数据(访问频数比较高的数据,某些商品,文章,视频)
- 热点数据的限流规则是什么样子的(主要针对参数进行限流设计)
- 热点数据中的特殊参数如何理解(热点限流中的摸个参数值的阈值设计)
- 对于热点数据的访问出现限流以后底层的异常是什么(ParamFlowException)
- 如何理解sentinel中的系统规则(是对所有链路的控制,是一种系统保护策略)
- sentinel的常用系统的规则有哪些(RT,QPS,CPU,线程,Load-linux,unix)
- Sentinel系统保护规则被触发以后底层抛出什么异常(SystemBlockException)
- 如何理解Sentinel中的授权规则(对指定资源的访问各出的一种简易的授权策略)
- sentinel的授权规则是如何设计的(白名单与黑名单)
- 如何理解白名单(允许访问的资源名单)
- 如何理解黑名单(不允许访问的资源名单)
- Sentinel如何识别白名单与黑名单(在拦截器中通过调用RequestOriginParser对象的方法检测具体的规则)
- 授权规则中RequestOriginParse类的作用是什么(对流控应用值进行解析,检查服务访问时传入的值是否与RequestOriginParse的parseOrigin方法的返回值是否相同)
Day07 Gateway 入门应用实践
1.核心知识点
- API网关(Gateway)诞生背景
- 市场上主流的微服务网关(spring cloud gateway,zuul)
2.常见问题分析
- 为什么要使用API网关(服务保护,统一url访问,统一身份认证,统一跨域设计)
- 网关入门实践步骤(依赖,配置,启动,服务访问)
- 网关项目中的负载均衡是如何实现的(底层基于Ribbon实现,可以在RibbonLoadBalancerClient中加断点分析)
Day08 Gateway 进阶应用实践
1.常见问题分析
- 网关中的谓词对象类型(GatewayPredicate)
- 网关中的谓词对象时如何创建的(谓词工厂)
- 你在网关中配置过哪些常用的谓词(Path,Method,Before,Query,Header)
- 网关中的过滤器是如何分类的(GlobalFilter,GatewayFilter)
- 我们是否可以自定义谓词,过滤器对象(可以)
- 网关层面如何基于sentinel实现限流(有关sentinel的两个依赖,配置,JVM参数)
- 网关层面的限流类型有哪些(路由id,API分组)
- 网关中做跨域如何设计(java代码方式配置)
- 如何将路由,跨域,负载等写到配置中心(注意层级关系)
2.面试题
- 什么是网关?(服务访问(流量)的一个入口)
- 为什么使用网关(服务安全,统一服务入口管理,负载均衡,限流,鉴权)
- Spring Cloud Gateway 应用的初始构建过程(添加依赖,配置)
- Gateway服务的启动底层是通过谁去实现的(Netty网络编程框架-ServerSocket)
- Gateway服务做请求转发时一定要在注册中心去注册吗(不一定,可以直接通过远端url进行访问)
- 网关层面是如何实现负载均衡的(通过服务名去查找具体的服务实例)
- 网关层面是如何通过服务名查找服务实例的(Ribbon)
- Ribbon中有哪些负载均衡算法(轮询,权重,hash…可以通过IRule接口进行查看分析)
- 网关进行请求转发的流程怎样,有哪些关键的对象(XxxHandlerMapping,Handler…)
- 网关层面服务的映射方式怎样(谓词-path,…服务名、服务实例)
- 网关层如何记录服务的映射(通过map,并要考虑读写锁的应用)
- 何为谓词(网关中封装了判断逻辑的一个对象)
- 谓词逻辑的设计是什么样的(谓词判断逻辑返回值为true则进行请求转发)
- 有哪些谓词逻辑(path,请求参数,请求方式,请求头)
- 网关过滤器的作用是什么(对请求和响应数据做一个预处理)
- 网关过滤器的类型有哪些(局部过滤器,全局过滤器)
- 如何理解局部过滤器(针对具体链路的应用过滤器,需要进行配置)
- 如何理解全局过滤器(作用于所有的请求链路)
- 如何自己定义全局过滤器(直接或间接实现GlobalFillter接口)
- 网关层面结合sentinel实现限流,类型有几种(两种—route id,api)
- sentinel底层限流的算法有哪些(滑动窗口,令牌桶,漏斗)
以上是关于微服务架构第一阶段(nacos,gateWay,RPC)的主要内容,如果未能解决你的问题,请参考以下文章
云原生一篇打通微服务架构,nacos + gateway + Redis + MySQL + docker
云原生一篇打通微服务架构,nacos + gateway + Redis + MySQL + docker
基于 GateWay 和 Nacos 实现微服务架构灰度发布方案
最新版微服务架构鉴权解决方案Spring Cloud Gateway + Oauth2.0+mybatis+mysql+redis+nacos 统一认证和鉴权