2021-08-11 nacos gateway

最近忙的不行
本地安装nacos ,它既是注册中心,又是配置中心 默认端口8848(珠穆朗玛峰的高度)
下载安装自行百度,我是在windos中安装的 用的是1.4.1,
下载地址:

https://github.com/alibaba/nacos/releases/tag/1.4.1
image.png

下载后解压
解压的文件中的conf中有个sql文件


image.png

解压之后,要把nacos需要的表sql文件,导入到数据库中,
解压文件中的conf中有个配置文件


image.png

修改为自己的数据库相关信息
image.png

并且要配置好nacos中连接数据库的基本信息,这样nacos才算安装好了。
由于本地是单机启动,所以解压之后,在nacos的bin目录下,调用cmd命令窗,然后执行

startup.cmd -m standalone

安装启动之后,访问 http://localhost:8848/nacos/, 默认的用户名密码,都是:nacos
本地启动服务注册进nacos之后,都会在这个列表中展示

nacos服务列表.png

nacos 的配置在配置列表中,可以单独为每个服务简历配置文件,然后在服务启动,注册进nacos时候,回去读取各自的配置,并且在nacos中的配置,优先级高于每个服务中的yml的配置文件
例如:
vse-console-basic 这个服务,已经注册进nacos,他会自行去读取nacos配置列表中的vse-console-basic.json文件,当读取不到的时候,走自己的配置文件(vse-console-basic 这个项目中的yml配置文件).
新建配置文件的时候,主要dataid 与 服务在nacos中注册的名称相同,那么该服务就会默认读取该配置
如下:
dataid.png

=================================================================================================

gateway 是一个统一路径的路由的作用,比如,我有十个服务,端口为8001---8010,如果不统一的话,那么访问十个服务,需要十个端口,当用了路由之后,可以将端口统一为路由的端口,再由路由转发给各个服务,工作过程大概是,gateway接到请求后,会去注册中心读取已经注册的服务列表,然后根据请求路径,转发给各个服务,这样,访问十个服务,只要访问路由的一个端口就可以了,本文中注册中心是nacos,路由是gateway。

gateway可以同样也是一个服务,启动之后也要注册到nacos中,同其他的服务部分配置一样,都是需要注册到nacos,然后他还有自己独有的配置,如路由转发配置
例如

server:
  port: 8110
  version: V1.0.0
spring:
  application:
    name: vse-console-gateway
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: nacos
        prefix: ${spring.application.name}
      discovery:
        server-addr: 127.0.0.1:8848
        username: nacos
        password: nacos
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: vse-console-auth
          uri: lb://vse-console-auth
          predicates:
            - Path=/v1/console/auth/**
        - id: vse-console-auth-tenant
          uri: lb://vse-console-auth
          predicates:
            - Path=/v1/console/*/auth/**
        - id: vse-console-basic
          uri: lb://vse-console-basic
          predicates:
            - Path=/v1/console/basic/**
        - id: vse-console-basic-tenant
          uri: lb://vse-console-basic
          predicates:
            - Path=/v1/console/*/basic/**
        - id: vse-console-event
          uri: lb://vse-console-event
          predicates:
            - Path=/v1/console/event/**
        - id: vse-console-event-tenant
          uri: lb://vse-console-event
          predicates:
            - Path=/v1/console/*/event/**
        - id: vse-console-message
          uri: lb://vse-console-message
          predicates:
            - Path=/v1/console/message/**
        - id: vse-console-message-tenant
          uri: lb://vse-console-message
          predicates:
            - Path=/v1/console/*/message/**
        - id: vse-console-upms
          uri: lb://vse-console-upms
          predicates:
            - Path=/v1/console/upms/**
        - id: vse-console-upms-tenant
          uri: lb://vse-console-upms
          predicates:
            - Path=/v1/console/*/upms/**
        - id: vse-console-vedio
          uri: lb://vse-console-vedio
          predicates:
            - Path=/v1/console/vedio/**
        - id: vse-console-vedio-tenant
          uri: lb://vse-console-vedio
          predicates:
            - Path=/v1/console/*/vedio/**
  main:
    allow-bean-definition-overriding: true

  #rabbitmq配置
  rabbitmq:
    addresses: 192.168.86.196
    username: mix
    password: jovision
    port: 5672
    virtual-host: /
  redis:
    # redis 服务器地址
    host: 192.168.86.196
    # Redis 服务器端连接端口
    port: 6379
    # redis 服务器连接密码
    password: Mix-redis
    # 连接超时时间(毫秒)
    timeout: 1000
    # redis 数据库索引,默认为0
    database: 1
feign:
  hystrix:
    enabled: true
#hystrix的超时时间
hystrix:
  command:
    default:
      coreSize: 100
      maxQueueSize: 100
      queueSizeRejectionThreshold: 200
      execution:
        timeout:
          enabled: true
        isolation:
          thread:
            timeoutInMilliseconds: 6000
#ribbon的超时时间
ribbon:
  ReadTimeout: 6000
  ConnectTimeout: 6000
nacos:
  data-id: route-console-gateway.json
  group-id: DEFAULT_GROUP
  timeout: 5000

其中 routes:部分为路由代理的关键配置

 - id: vse-console-basic  // 配置时候的唯一id,不重复即可
   uri: lb://vse-console-basic // 在注册中心注册的服务名称
    predicates:                    // 关键字,断言
            - Path=/v1/console/basic/**  //匹配规则  访问vse-console-basic 这个服务的所有接口都必须以/v1/console/basic/开头(所有以 /v1/console/basic/ 为开头的服务,都会进入vse-console-basic 这个服务中)
 - id: vse-console-basic-tenant
   uri: lb://vse-console-basic
   predicates:
            - Path=/v1/console/*/basic/** //匹配规则  访问vse-console-basic 这个服务的所有接口都必须以/v1/console/*/basic/开头(所有以 /v1/console/*/basic/ 为开头的服务,都会进入vse-console-basic 这个服务中)

其实上面的配置,可以看到 uri 这个关键字,我粘贴出来的,相当于是重复的两个,都是对vse-console-basic 这个服务的匹配规则的限制,为什么写两段呢??
这两段是或者的关系,即 路径 /v1/console/basic/** 或者 /v1/console//basic/* 均可以
如果写成

 - id: vse-console-basic
   uri: lb://vse-console-basic
    predicates:
            - Path=/v1/console/basic/**
            - Path=/v1/console/*/basic/**

这个是并且的关系.........经过实践发现这个坑,弄了好久~~

这是其一
只是相当于在gateway中的固定的配置,其实,gateway还可以动态路由的配置,其实这不是新东西,为什么这么说呢?
它的动态路由,其实就是读取nacos中的配置文件,这样在nacos中随时修改,那么gateway都可以立即获取感知到,如果改了刚刚routes中的配置,也就是相当于动态路由了.

如何实现呢?

nacos:
  data-id: route-console-gateway.json
  group-id: DEFAULT_GROUP
  timeout: 5000

就是这段代码,它会去nacos读取配置列表中data-id为 route-console-gateway的配置,如果读取到了,那么其实也就是实现了动态路由。读取不到,还是走刚刚的我粘贴中的yml配置文件

你可能感兴趣的:(2021-08-11 nacos gateway)