SpringCloud的组件
SpringCloud的组件包括
服务注册发现:Eureka、nacos
服务远程调用:OpenFeign、Dubbo
统一配置管理:nacos
统一网关路由:SpringCloudGateway
流控、降级、保护:Hystix、Sentinel
Eureka
- user-service服务实例启动后,将自己的信息注册到eureka-server(Eureka服务端)这个叫服务注册
- eureka-server保存服务名称到服务实例地址列表的映射关系
- order-service根据服务名称,拉取实例地址列表。这个叫服务发现或服务拉取
- order-service从实例列表中利用负载均衡算法选中一个实例地址, 向该实例地址发起远程调用
- user-service会每隔一段时间(默认30秒)向eureka-server发起请求,报告自己状态称为心跳
- 当超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除
- order-service拉取服务时,就能将故障实例排除了
将服务注册到eureka
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
使用那nacos需要配置(application.properties里配置端口)并启动(startup.cmd -m standalone)它的客户端。
搭建那nacos集群:进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf,添加各个节点信息127.0.0.1:8845、127.0.0.1:8846、127.0.0.1:8847,将nacos复制三份,分别修改端口启动
nacos配置
在user-service中添加一个bootstrap.yaml文件
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
此文件配置会从nacos中的userservice-dev.yaml拉取配置
- Nacos与eureka的共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
- Nacos与Eureka的区别
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
Feign远程调用
Order服务需要调用User服务的内容
首先建立一个模块feign,@FeignClient注解标记。里面提供接口和调用的方法。使用User模块实现这个接口,重写里面的方法。使用Order模块调用,@EnableFeignClients标记,再使用自动装配将接口调用
Spring Cloud Gateway
- 请求路由
- 权限控制
- 限流
基础配置和路由规则
server:
port: 10010 # 网关端口
spring:
application:
name: gateway # 服务名称
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes: # 网关路由配置
- id: user-service # 路由id,自定义,只要唯一即可
# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
- Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求
filters: # 过滤器
- AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头
什么是跨域问题
跨域:域名不一致就是跨域,主要包括:
- 域名不同: www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com
- 域名相同,端口不同:localhost:8080和localhost8081