springclod

微服务技术栈包括:注册中心、配置中心、服务网关、消息队列、分布式缓存搜索、分布式日志服务、系统监控链路追踪、jenkins微服务部署

eureka注册中心

  • 不同微服务模块之间,为了不同业务需求(请求订单接口,订单模块处理,但是需要在订单信息中查出用户信息,需要请求用户模块,通过eureke的restTemplate发起http请求,请求用户模块),互相请求,使用注册中心灵活管理请求

步骤:

  1. 新建spring模块,导入依赖,spring-cloud-starter-netflix-eureka-server,注意版本管理

  2. 编写启动类,在启动类上添加@EnableEurekaServer

  3. 编写application.yml,其中自己注册自己的eurekaimage.png

服务注册

  1. 在其他微服务模块中添加依赖 spring-cloud-starter-netflix-eurake-clint

  2. 在此模块的application.yml 中编写配置,修改spring的名称和eureka配置image.png

  3. 在此模块的启动类中注入RestTemplate对象,并开启负载均衡,多个相同名称的服务提供方时,自动选择空闲模块image.png

  4. 使用服务名称代替请求url的image.png

上面的负载均衡用到的Ribbon的组件

  1. 当服务消费者发起请求,Ribbon拦截请求,去eureka-service拉取请求的名称uservice,eureka返回列表,Ribbon轮询选择列表中的服务提供方请求数据

  2. 被@LoadBalanced注释的RestTemplate发起的请求会被LoadBalancerInterceptor拦截,会先解析请求的url,执行RibbonLoadBalancerClient.execute()

  3. execute()方法中使用getLoadBalancer()获取当前Eureka管理的同名service列表,然后通过getServer()方法做负载均衡,通过IRole的实现类规定负载均衡策略获取实际server模块地址和端口,然后发起请求,返回数据1672910364731697.png

负载均衡策略

  • image.png
  1. 调整负载均衡的方法,默认是轮询方式

  2. 第一种:可以在启动类中(或者配置类中)定义一个新的IRole返回对应的策略,并使用@Bean的方式注入到spring中,此方式是全局策略,此消费者访问所有的提供者都是这个策略

  3. 第二种:在消费者的application,yml中配置指定提供者的策略image.png

  4. ribbon使用的是懒加载,在第一次发起请求的时候,才会拉取eureka服务,第一次请求时间会稍微有点长,可以通过配置文件中使用ribbon.eager-load.enable=true配置ribbon.eager-load.clients=orderservice 或者配置多个提供者image.png

Nacos

阿里巴巴产品,是springcloud中的一个组件,比eureka功能相对多

注册中心使用:

  1. 在nacos.io或者github下载服务端包

  2. 在解压包中bin文件夹下启动,config文件夹下配置信息

  3. 在config文件夹下获取数据库文件,新建数据库导入

  4. application.properties文件夹中配置数据库信息

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use \`spring.sql.init.platform\` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql 
### Count of DB:
db.num=1 
### Connect URL of DB:
# db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# db.user.0=nacos
# db.password.0=nacos
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
  1. 启动成功会跳出控制台。服务端安装完成

  2. 相比于eureka,两个组件遵循spring-commom除了依赖和配置信息需要修改,代码基本不用修改

  3. 消费者添加客户端依赖:可以先添加阿里巴巴的spring-cloud-alibaba-dependencies,可以自动管理版本号

  4. 添加nacos的客户端依赖,spring-cloud-starter-alibaba-nacos-discovery 修改配置文件中的端口信息image.png

配置实例的集群属性

  1. spring.cloud.nacos.discovery.cluster-name属性可以指定集群,可通过配置IRole设置优先访问本地集群,NacosRule优先访问本地,使用随机访问,如果本地集群没有服务则选择非本地集群访问,并生成日志

  2. 可在控制台配置访问权重

  3. Nacos和eureka共同点和区别

image.png

Nacos配置管理

统一配置中心

  1. 配置管理微服务,不用再去管理修改每个微服务的application.yaml
  • 在nacos的配置管理里面配置+

  • 新建配置,DataID名称需要唯一:服务名称-配置环境-后缀名  userservice-dev.yaml

  • 多环境配置userservice.ymal 无论是dev还是test都可以读到

  • 新建配置,配置内容一般是需要变的内容,不需要变的一般不配置

  • 然后点击发布即可

  • 原配置获取步骤:

  • 项目启动

  • 读取本地配置文件application.yml

  • 创建spring容器

  • 加载bean

  • 现在使用nacos:

  • 项目启动

  • 读取nacos的配置文件

  • 读取本地配置文件application.yml

  • 创建spring容器

  • 加载bean

  • 在读取application.yml之前项目启动会优先读取bootstrap.yml可以在bootstrap.yml中设置好nacos的地址

  • image.png

  1. 在这可以配置使用哪个配置,这里读取uservice-dev.yml,同时如果有userservice.yml也会读取,优先级:userservice-dev.yml>uservice.yaml>微服务的application.yml

  2. 在引导文件中设置这样启动时微服务模块就能从nacos获取配置文件

  3. 配置自动刷新配置信息,在nacos中修改配置信息,微服务中不需要重启即可自动热更新,比如使用@Value方法给属性赋值,那么必须在类上使用@RefreshScope,修改之后nacos会通知微服务更改

  • image.png可以使用类读取配置文件的属性,配置文件中的格式约定pattern: dateformat : yyyy-MM-dd ,在其他类中使用即可

nocas集群

Fegin

fegin是一个声明式的http客户端,帮助我们优雅的实现http请求  fegin继承了ribbon可以实现负载均衡

  1. 安装依赖spring-cloud-starter-openfeign

  2. 在启动类添加@EnableFeignClients

  3. 编写接口image.png

  4. 调用接口image.png

网关Gateway

为了管理微服务开放的接口不被随便访问      网关功能:身份认证和权限校验、服务路由负载均衡、请求限流

  1. spring中有两种实现,gateway和zuul

  2. zuul基于Servlet实现属于阻塞式编程。springcloudGetway是基于spring5中的webFlux属于响应式编程,getway具有更好的性能

搭建步骤

  1. 创建新的module引入SpringCloudGateway的依赖和nacos的服务发现依赖pring-cloud-starter-gatewayspring-cloud-starter-alibaba-nacos-discovery

  2. 编写路由配置和nacos地址

image.png

  1. 访问localhost:10010/user/1

  2. 路由断言工厂。。

  3. 路由过滤器配置,全局过滤器

  4. 过滤器执行顺序

网关nacos的跨域配置