现在学习到的组件
1.nacos:注册中心,用于微服务之间交流的第三方管家,与生产者建立心跳契约对其监听,注册中心维护一张生产者的活跃表,会将活跃表实时更新并推送给消费者。
2.feign:nacos只是对生产者进行注册,而实际的转发并不是由nacos来完成的,简单来讲nacos的主要作用就是维护一张表,这张表只写了对应的生产者微服务的名称和一些基本信息,消费者能够知道对方的名字。并且nacos还可以配合负载均衡,为消费者选取出最适合分配到的生产者。
但是——消费者调用生产者的这一个网络连接过程并不是nacos组件完成的,而是使用feign完成的!!!
3.当我们拆分完微服务后,各个微服务的端口地址五花八门,而原本单体架构前端访问后端时再不使用荷载均衡时,只会访问一个后端端口,常见的如8080端口。
现在由于微服务的拆分,导致不同的服务端口不同,前端访问后端变得困难。
所以使用网关,网关对微服务的端口进行统一管理,而前端只需要访问网管即可,解放了前端的接口传递。
网关实际上就是一个单独模块,专用于转发接口调用。
4.完整流程
4.1前端调用端口8080的userController的search方法,接口对应为:localhost:8080/users/search。
假设现在user模块有多个微服务端口分别为:8083、8084、8085。
4.2localhost:8080/users/search被网关接收,网关解析到/users路径,网关配置文件中users对应微服务名称为user-service
4.3网关通过nacos注册中心中拉取user-service的微服务列表,并使用负载均衡选取合适的服务器,假设现在选取的是注册列表中的端口号为8084的服务器,从而网关会向下转发localhost:8084/users/search
4.4 8084端口的服务器完成接口调用工作,返回网管相应数据内容
4.5 网关返回前端数据内容
5.总结:
网关关注的是前端单端口请求与后端多端口接收的不匹配问题。
feign关注后端多端口之间的调用问题。
nacos关注如何解决后端多端口之间生产者与消费者之间互相无法discover的矛盾。
上述转发过程,只需要写入到配置文件中即可,配置文件中的gateway对应网关
spring:application:name: gateway # 应用服务名# Nacos服务发现配置cloud:nacos:server-addr: 127.0.0.1:8848config:import-check:enabled: false # 暂时禁用导入检查discovery:enabled: truenamespace: publiccluster-name: DEFAULTgroup: DEFAULT_GROUP# 网关路由配置gateway:routes:- id: user-service # 路由IDuri: lb://user-service # 负载均衡目标服务名predicates:- Path=/users/**,addresses/** # 路径匹配规则- id: trade-service # 路由IDuri: lb://trade-service # 负载均衡目标服务名predicates:- Path=/orders/** # 路径匹配规则- id: pay-service # 路由IDuri: lb://pay-service # 负载均衡目标服务名predicates:- Path=/pay-orders/** # 路径匹配规则- id: item-service # 路由IDuri: lb://item-service # 负载均衡目标服务名predicates:- Path=/items/**,/search/**- id: cart-service # 路由IDuri: lb://cart-service # 负载均衡目标服务名predicates:- Path=/carts/** # 路径匹配规则
其中id对应的是路由id,指的是这个网关的一个命名,uri是需要路由到的微服务的命名(这部分写在微服务自身的application.yaml配置文件中),predicates是路径匹配算法。