springclod
微服务技术栈包括:注册中心、配置中心、服务网关、消息队列、分布式缓存搜索、分布式日志服务、系统监控链路追踪、jenkins微服务部署
eureka注册中心
- 不同微服务模块之间,为了不同业务需求(请求订单接口,订单模块处理,但是需要在订单信息中查出用户信息,需要请求用户模块,通过eureke的restTemplate发起http请求,请求用户模块),互相请求,使用注册中心灵活管理请求
步骤:
-
新建spring模块,导入依赖,spring-cloud-starter-netflix-eureka-server,注意版本管理
-
编写启动类,在启动类上添加@EnableEurekaServer
-
编写application.yml,其中自己注册自己的eureka
服务注册
-
在其他微服务模块中添加依赖 spring-cloud-starter-netflix-eurake-clint
-
在此模块的application.yml 中编写配置,修改spring的名称和eureka配置
-
在此模块的启动类中注入RestTemplate对象,并开启负载均衡,多个相同名称的服务提供方时,自动选择空闲模块
-
使用服务名称代替请求url的
上面的负载均衡用到的Ribbon的组件
-
当服务消费者发起请求,Ribbon拦截请求,去eureka-service拉取请求的名称uservice,eureka返回列表,Ribbon轮询选择列表中的服务提供方请求数据
-
被@LoadBalanced注释的RestTemplate发起的请求会被LoadBalancerInterceptor拦截,会先解析请求的url,执行RibbonLoadBalancerClient.execute()
-
execute()方法中使用getLoadBalancer()获取当前Eureka管理的同名service列表,然后通过getServer()方法做负载均衡,通过IRole的实现类规定负载均衡策略获取实际server模块地址和端口,然后发起请求,返回数据
负载均衡策略
-
调整负载均衡的方法,默认是轮询方式
-
第一种:可以在启动类中(或者配置类中)定义一个新的IRole返回对应的策略,并使用@Bean的方式注入到spring中,此方式是全局策略,此消费者访问所有的提供者都是这个策略
-
第二种:在消费者的application,yml中配置指定提供者的策略
-
ribbon使用的是懒加载,在第一次发起请求的时候,才会拉取eureka服务,第一次请求时间会稍微有点长,可以通过配置文件中使用ribbon.eager-load.enable=true配置ribbon.eager-load.clients=orderservice 或者配置多个提供者
Nacos
阿里巴巴产品,是springcloud中的一个组件,比eureka功能相对多
注册中心使用:
-
在nacos.io或者github下载服务端包
-
在解压包中bin文件夹下启动,config文件夹下配置信息
-
在config文件夹下获取数据库文件,新建数据库导入
-
在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
-
启动成功会跳出控制台。服务端安装完成
-
相比于eureka,两个组件遵循spring-commom除了依赖和配置信息需要修改,代码基本不用修改
-
消费者添加客户端依赖:可以先添加阿里巴巴的spring-cloud-alibaba-dependencies,可以自动管理版本号
-
添加nacos的客户端依赖,spring-cloud-starter-alibaba-nacos-discovery 修改配置文件中的端口信息
配置实例的集群属性
-
spring.cloud.nacos.discovery.cluster-name属性可以指定集群,可通过配置IRole设置优先访问本地集群,NacosRule优先访问本地,使用随机访问,如果本地集群没有服务则选择非本地集群访问,并生成日志
-
可在控制台配置访问权重
-
Nacos和eureka共同点和区别
Nacos配置管理
统一配置中心
- 配置管理微服务,不用再去管理修改每个微服务的
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的地址
-
在这可以配置使用哪个配置,这里读取uservice-dev.yml,同时如果有userservice.yml也会读取,优先级:userservice-dev.yml>uservice.yaml>微服务的application.yml
-
在引导文件中设置这样启动时微服务模块就能从nacos获取配置文件
-
配置自动刷新配置信息,在nacos中修改配置信息,微服务中不需要重启即可自动热更新,比如使用@Value方法给属性赋值,那么必须在类上使用@RefreshScope,修改之后nacos会通知微服务更改
- 可以使用类读取配置文件的属性,配置文件中的格式约定pattern: dateformat : yyyy-MM-dd ,在其他类中使用即可
nocas集群
- …
Fegin
fegin是一个声明式的http客户端,帮助我们优雅的实现http请求 fegin继承了ribbon可以实现负载均衡
-
安装依赖spring-cloud-starter-openfeign
-
在启动类添加@EnableFeignClients
-
编写接口
-
调用接口
网关Gateway
为了管理微服务开放的接口不被随便访问 网关功能:身份认证和权限校验、服务路由负载均衡、请求限流
-
spring中有两种实现,gateway和zuul
-
zuul基于Servlet实现属于阻塞式编程。springcloudGetway是基于spring5中的webFlux属于响应式编程,getway具有更好的性能
搭建步骤
-
创建新的module引入SpringCloudGateway的依赖和nacos的服务发现依赖
pring-cloud-starter-gateway
和spring-cloud-starter-alibaba-nacos-discovery
-
编写路由配置和nacos地址
-
访问localhost:10010/user/1
-
路由断言工厂。。
-
路由过滤器配置,全局过滤器
-
过滤器执行顺序
网关nacos的跨域配置
- …