Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway

Nacos ,是阿里大佬的服务框架。简述:Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
作用: 基本功能 就是 替代 Eureka ,Apollo 实现 服务管理,配置中心的功能。

Nacos 安装使用:

  • 下载地址:https://github.com/alibaba/nacos/releases
  • 官方文档:https://nacos.io/zh-cn/index.html
  • 使用方法:window版本,cmd窗口 ,startup.cmd — 其实就相当于启动了一个服务.
    Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway_第1张图片

Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway_第2张图片
Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway_第3张图片

配置中心

Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway_第4张图片
使用原因:分布式项目的配置文件过多,不好管理,等…

主要流程:

拉取: 是在项目启动的时候通过配置中心拉取配置信息
推送: 在配置中心修改配置之后,可以将配置实时地推送给客户端进行更新,这样项目不用 重启,修改配置实时生效,延迟较低.

配置中心实现操作:

  1. 导包

        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
            <version>2.2.1.RELEASEversion>
        dependency>


        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            <version>2.2.1.RELEASEversion>
        dependency>

2.启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author hexiaoshu
 */
@EnableDiscoveryClient
@SpringBootApplication
public class ClientApplication {


    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class, args);
    }

}

3.新建 bootstrap.yaml 文件

spring:
  profiles:
    active: dev
  application:
    name: nacos-client    #应用名称, 对应关系 nacos配置列表的 Data ID 名称,跟服务名称一致,就能匹配上。
  cloud:
    nacos:
      config:
        group: DEFAULT_GROUP
        server-addr: 127.0.0.1:8848 #nacos服务地址 
        file-extension: yaml  #配置文件类型
  1. nacos后台,配置列表 添加配置。 注意 Data ID 跟,服务名称对应
    Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway_第5张图片
  2. 启动 。就会自动去nacos拉取配置信息了.
    Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway_第6张图片
  3. openfeign 一样可以照旧使用 ( → 见上篇文章 )。

网关配置 gateway

Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway_第7张图片
网关
API 网关是对外提供服务的一个入口,并且隐藏了内部架构的实现,是微服务架构中必不可少的一个组件。
API 网关可以为我们管理大量的 API 接口,负责对接客户、协议适配、安全认证、路由转发、流量限制、日志监控、防止爬虫、灰度发布等功能

pom

		<dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-gatewayartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-hystrixartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redisartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-data-redis-reactiveartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
            <version>2.2.1.RELEASEversion>
        dependency>


        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            <version>2.2.1.RELEASEversion>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

bootstrap.yaml

spring:
  application:
    name: nacos-gateway
  cloud:
    nacos:
      config:
        group: GATEWAY_GROUP
        server-addr: 127.0.0.1:8848
        file-extension: yaml

nacos 新建配置文件

Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway_第8张图片

server:
  port: 8000
spring:

  cloud:
    gateway:
      discovery:
        locator:
          # 是否和服务注册与发现组件结合,设置为 true 后可以直接使用应用名称调用服务
          enabled: true
      # 路由(routes:路由,它由唯一标识(ID)、目标服务地址(uri)、一组断言(predicates)和一组过滤器组成(filters)。filters 不是必需参数。)
      routes:
        # uri以lb://开头(lb代表从注册中心获取服务),后面接的就是需要转发到的服务名称
        # 路由标识(id:标识,具有唯一性)
        - id: nacos-customer
          # 目标服务地址(uri:地址,请求转发后的地址)
          uri: lb://nacos-customer
          # 路由条件(predicates:断言,匹配 HTTP 请求内容)
          predicates:
            - Path=/consumer/**   #匹配 如 localhost:3001/consumer/test的请求地址
            # - After=2019-01-01T00:00:00+08:00[Asia/Shanghai]  匹配 2019年1月1日0点0分0秒之后的所有请求, -Before 为之前
            # - Between=2019-01-01T00:00:00+08:00[Asia/Shanghai], 2019-07-01T00:00:00+08:00[Asia/Shanghai] 时间范围之内
            # - Header=X-Request-Id, \d+  请求头匹配
            # - Host=**.baidu.com  host域名匹配,  www.baidu.com,md.baidu.com
            # - Method=GET  请求方式匹配
            # - Query=smile  请求参数匹配  ,eg:localhost:8080?smile=x&id=2
            # - RemoteAddr=192.168.1.1/24 ,ip地址匹配
            # 各种 Predicates 同时存在于同一个路由时,请求必须同时满足所有的条件才被这个路由匹配

        - id: nacos-client
          uri: lb://nacos-client #lb:使用loadBalanceClient实现负载均衡,后面users是微服务的名称[应用于集群环境]
          predicates:
            - Path=/client/**
          filters:
            - name: RequestRateLimiter  # 局部限流过滤器
              args:
                key-resolver: '#{@iPKeyResolver}'
                redis-rate-limiter.replenishRate: 1   # 每秒钟只允许1个请求
                redis-rate-limiter.burstCapacity: 10   # 允许并发有3个请求[宽限的个数]


  redis:
    database: 0        # 设置存储分片 db0
    host: localhost
    port: 6379
    password:

启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * @author hexiaoshu
 */
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayServerApplication.class, args);
    }

    /**
     * 创建用户唯一标识:使用IP作为用户唯一标识,根据IP进行限流操作
     * @return
     */
    @Bean(name = "iPKeyResolver")
    public KeyResolver userKeyResolver(){
        return new KeyResolver() {
            @Override
            public Mono<String> resolve(ServerWebExchange exchange) {
                // 获得用户iP
                String ip = exchange.getRequest().getRemoteAddress().getHostString();
                return Mono.just(ip);
            }
        };
    }

}

你可能感兴趣的:(分布式,服务器)