欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-15 19:11:04
Nacos ,是阿里大佬的服务框架。简述:Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。作用: 基本功能 就是 替代 Eureka ,Apollo 实现 服务管理,配置中心的功能。Nacos 安装使用:下载地址:https://github.com/alibaba/nacos/releases官方文档:https://nacos.io/zh-cn/index.html使用方法:window版本,cmd窗口 ,startup.cmd —....

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

Nacos 安装使用:

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

配置中心

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

主要流程:

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

配置中心实现操作:

  1. 导包
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </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
  2. 启动 。就会自动去nacos拉取配置信息了.
    Springcloud 整理笔记记录 - Nacos 整合 ,网关 gateway
  3. openfeign 一样可以照旧使用 ( → 见上篇文章 )。

网关配置 gateway

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

pom

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        </dependency>

        <!-- 监控管理 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>


        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </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

server:
  port: 3000
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-config
          uri: lb://nacos-config #lb:使用loadBalanceClient实现负载均衡,后面users是微服务的名称[应用于集群环境]
          predicates:
            - Path=/client/**
          filters:
            - SetResponseHeader=gatewayHeader, GateWay   #转发添加设置响应头
            - name: RequestRateLimiter  # 局部限流过滤器
              args:
                key-resolver: '#{@iPKeyResolver}'
                redis-rate-limiter.replenishRate: 1   # 每秒钟只允许1个请求
                redis-rate-limiter.burstCapacity: 10   # 允许并发有3个请求[宽限的个数]
            - name: RequestSize   #设置文件上传大小
              args:
                maxSize: 5000000



  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);
            }
        };
    }

}

本文地址:https://blog.csdn.net/hesqlplus730/article/details/107341219