> 文章列表 > SpringCloud的组件

SpringCloud的组件

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