赞
踩
最近忙的不行
本地安装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配置文件
StripPrefix 过滤器
- spring:
- cloud:
- gateway:
- routes:
- - id: vse-console-basic
- uri: lb://vse-console-basic
- predicates:
- - Path=/v1/**
- filters:
- - StripPrefix=1
如上,我们访问网关地址http://host:port/vse-console-basic/v1/hello
时
StripPrefix
过滤器时,gateway 发送请求到后台服务vse-console-basic
的url就是http://vse-console-basic/v1/hello
StripPrefix
过滤器时,gateway会根据StripPrefix=1
所配的值(这里是1)去掉URL路径中的部分前缀(这里去掉一个前缀,即去掉v1)spring-cloud-producer
的url变成http://vse-console-basic/hello
PrefixPath 过滤器
StripPrefix
正相反,是在URL路径前面添加一部分的前缀
- spring:
- cloud:
- gateway:
- routes:
- - id: vse-console-basic
- uri: lb://vse-console-basic
- filters:
- - PrefixPath=/v1
/v1
添加到路由prefixpath_route
匹配到的所有请求的路径的前面。
/hello
的请求将会被发送到/v1/hello
。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。