最近忙的不行
本地安装nacos ,它既是注册中心,又是配置中心 默认端口8848(珠穆朗玛峰的高度)
下载安装自行百度,我是在windos中安装的 用的是1.4.1,
下载地址:
https://github.com/alibaba/nacos/releases/tag/1.4.1
下载后解压
解压的文件中的conf中有个sql文件
解压之后,要把nacos需要的表sql文件,导入到数据库中,
解压文件中的conf中有个配置文件
修改为自己的数据库相关信息
并且要配置好nacos中连接数据库的基本信息,这样nacos才算安装好了。
由于本地是单机启动,所以解压之后,在nacos的bin目录下,调用cmd命令窗,然后执行
startup.cmd -m standalone
安装启动之后,访问 http://localhost:8848/nacos/, 默认的用户名密码,都是:nacos
本地启动服务注册进nacos之后,都会在这个列表中展示
nacos 的配置在配置列表中,可以单独为每个服务简历配置文件,然后在服务启动,注册进nacos时候,回去读取各自的配置,并且在nacos中的配置,优先级高于每个服务中的yml的配置文件
例如:
vse-console-basic 这个服务,已经注册进nacos,他会自行去读取nacos配置列表中的vse-console-basic.json文件,当读取不到的时候,走自己的配置文件(vse-console-basic 这个项目中的yml配置文件).
新建配置文件的时候,主要dataid 与 服务在nacos中注册的名称相同,那么该服务就会默认读取该配置
如下:
=================================================================================================
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配置文件