Nacos配置管理:
    作用:将配置集中管理
    实现配置的热更新(在配置变更时,及时通知微服务)
    可以设置共享配置
    实现步骤:
    Ⅰ:在nacos的配置文件表单中填写配置信息
    Data ID :(配置文件的id) 服务名称-环境名.后缀名
    例:userservice-dev.yaml
    Ⅱ:在服务的pom文件中引入nacos-config的客户端依赖


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config

    Ⅲ:在服务中添加bootstrap.yaml配置文件(包含了nacos中的配置文件名和nacos地址)
    spring:
    application:
    name: userservice # 服务名称
    profiles:
    active: dev #开发环境,这里是dev
    cloud:
    nacos:
    server-addr: localhost:8848 # Nacos地址
    config:
    file-extension: yaml # 文件后缀名
    Ⅳ:添加业务逻辑代码,读取nacos配置
    使用的注解 @Value(“${配置属性名}”)

    ————此时配置完成后无法进行热更新(即配置变更时,无法及时通知微服务)————

    Ⅴ:配置热更新
    方法一:在@Value注入的变量所在类上添加注解@RefreshScope
    方法二:编写一个配置类,使用@ConfigurationProperties注解代替@Value注解读取nacos中的配置文件

    配置共享:
    原理: 微服务启动时会从nacos读取多个配置文件 { 服务名-profile.yaml、服务名.yaml },无论环境(profile)如何变化,服务名.yaml文件一定会加载,因此可以将多环境共享配置写入这个文件中。
    优先级:nacos中的 服务名-环境名.yaml > nacos中的 服务名.yaml > 本地配置application.yml
    补充:
    项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

    Feign远程调用:
    作用:代替之前的RestTemplate发起远程调用(实现http请求的发送)
    实现步骤:
    Ⅰ:在服务消费者的pom文件中引入feign的依赖

    org.springframework.cloud
    spring-cloud-starter-openfeign

    Ⅱ:在服务消费者的启动类添加@EnableFeignClients注解开启Feign的功能
    Ⅲ:在服务消费者中编写Feign客户端(接口)
    例:
    @FeignClient(“userservice”)
    public interface UserClient {
    //需要远程调那个就直接把对外接口复制过来(要添加上类上的路径)
    @GetMapping(“/user/{id}”)
    User findById(@PathVariable(“id”) Long id);
    }
    这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如:

    1. - 服务名称:userservice
    2. - 请求方式:GET
    3. - 请求路径:/user/{id}
    4. - 请求参数:Long id
    5. - 返回值类型:User

    这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。
    Ⅳ:使用FeignClient中定义的方法代替RestTemplate

    Feign的自定义配置:
    image.png
    日志的级别分为四种:

      - NONE:不记录任何日志信息,这是默认值。
      - BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
      - HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
      - FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
    

    修改feign的日志级别实现步骤
    方法一:配置文件
    feign:
    client:
    config:
    userservice: # 针对某个微服务的配置
    # default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
    loggerLevel: FULL # 日志级别
    方法二:Java代码
    ①先声明一个配置类,然后声明一个Logger.Level的对象
    public class DefaultFeignConfiguration {
    @Bean
    public Logger.Level feignLogLevel(){
    return Logger.Level.BASIC; // 日志级别为BASIC
    }
    }
    ②如果要全局生效,将其放到启动类的@EnableFeignClients这个注解中
    @EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration .class)
    如果是局部生效,则把它放到对应的@FeignClient这个注解中
    @FeignClient(value = “userservice”, configuration = DefaultFeignConfiguration .class)

    Feign使用优化:
    原理:
    Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:
    •URLConnection:默认实现,不支持连接池
    •Apache HttpClient :支持连接池
    •OKHttp:支持连接池
    因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection

    Ⅰ:在服务消费者的pom文件中引入Apache的HttpClient依赖


    io.github.openfeign
    feign-httpclient

    Ⅱ:在服务消费者的application.yml中配置连接池
    feign:
    httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数
    代码优化:(简化重复的代码编写
    继承
    抽取为一个独立模块,对外提供其依赖包
    【扫描时可以扫描
    或者需要加载接口的字节码**
    @EnableFeignClients(basePackages = “cn.itcast.feign.clients”)
    @EnableFeignClients(clients = {UserClient.class})】

    Gateway服务网关:
    作用: 为微服务架构提供一种简单有效的统一的 API 路由管理
    核心功能:对用户请求做身份认证、权限校验
    将用户请求路由到微服务,并实现负载均衡
    对用户请求做限流
    实现步骤:
    Ⅰ:创建gateway服务,引入依赖


    org.springframework.cloud
    spring-cloud-starter-gateway



    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery

    Ⅱ:编写启动类
    Ⅲ:编写基础配置和路由规则(application.yml)
    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/开头就符合要求
    流程图:image-20210714211742956.png
    断言工厂:**
    image.png