最近忙的不行
本地安裝nacos ,它既是注冊中心,又是配置中心 默認(rèn)端口8848(珠穆朗瑪峰的高度)
下載安裝自行百度,我是在windos中安裝的 用的是1.4.1,
下載地址:
https://github.com/alibaba/nacos/releases/tag/1.4.1
下載后解壓
解壓的文件中的conf中有個sql文件
解壓之后,要把nacos需要的表sql文件,導(dǎo)入到數(shù)據(jù)庫中,
解壓文件中的conf中有個配置文件
修改為自己的數(shù)據(jù)庫相關(guān)信息
并且要配置好nacos中連接數(shù)據(jù)庫的基本信息,這樣nacos才算安裝好了积糯。
由于本地是單機啟動,所以解壓之后,在nacos的bin目錄下,調(diào)用cmd命令窗,然后執(zhí)行
startup.cmd -m standalone
安裝啟動之后,訪問 http://localhost:8848/nacos/, 默認(rèn)的用戶名密碼,都是:nacos
本地啟動服務(wù)注冊進nacos之后,都會在這個列表中展示
nacos 的配置在配置列表中,可以單獨為每個服務(wù)簡歷配置文件,然后在服務(wù)啟動,注冊進nacos時候,回去讀取各自的配置,并且在nacos中的配置,優(yōu)先級高于每個服務(wù)中的yml的配置文件
例如:
vse-console-basic 這個服務(wù),已經(jīng)注冊進nacos,他會自行去讀取nacos配置列表中的vse-console-basic.json文件,當(dāng)讀取不到的時候,走自己的配置文件(vse-console-basic 這個項目中的yml配置文件).
新建配置文件的時候,主要dataid 與 服務(wù)在nacos中注冊的名稱相同,那么該服務(wù)就會默認(rèn)讀取該配置
如下:
=================================================================================================
gateway 是一個統(tǒng)一路徑的路由的作用,比如,我有十個服務(wù),端口為8001---8010,如果不統(tǒng)一的話,那么訪問十個服務(wù),需要十個端口,當(dāng)用了路由之后,可以將端口統(tǒng)一為路由的端口,再由路由轉(zhuǎn)發(fā)給各個服務(wù),工作過程大概是,gateway接到請求后,會去注冊中心讀取已經(jīng)注冊的服務(wù)列表,然后根據(jù)請求路徑,轉(zhuǎn)發(fā)給各個服務(wù),這樣,訪問十個服務(wù),只要訪問路由的一個端口就可以了,本文中注冊中心是nacos,路由是gateway。
gateway可以同樣也是一個服務(wù)慕购,啟動之后也要注冊到nacos中,同其他的服務(wù)部分配置一樣,都是需要注冊到nacos,然后他還有自己獨有的配置,如路由轉(zhuǎn)發(fā)配置
例如
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 服務(wù)器地址
host: 192.168.86.196
# Redis 服務(wù)器端連接端口
port: 6379
# redis 服務(wù)器連接密碼
password: Mix-redis
# 連接超時時間(毫秒)
timeout: 1000
# redis 數(shù)據(jù)庫索引,默認(rèn)為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:部分為路由代理的關(guān)鍵配置
- id: vse-console-basic // 配置時候的唯一id,不重復(fù)即可
uri: lb://vse-console-basic // 在注冊中心注冊的服務(wù)名稱
predicates: // 關(guān)鍵字,斷言
- Path=/v1/console/basic/** //匹配規(guī)則 訪問vse-console-basic 這個服務(wù)的所有接口都必須以/v1/console/basic/開頭(所有以 /v1/console/basic/ 為開頭的服務(wù),都會進入vse-console-basic 這個服務(wù)中)
- id: vse-console-basic-tenant
uri: lb://vse-console-basic
predicates:
- Path=/v1/console/*/basic/** //匹配規(guī)則 訪問vse-console-basic 這個服務(wù)的所有接口都必須以/v1/console/*/basic/開頭(所有以 /v1/console/*/basic/ 為開頭的服務(wù),都會進入vse-console-basic 這個服務(wù)中)
其實上面的配置,可以看到 uri 這個關(guān)鍵字,我粘貼出來的,相當(dāng)于是重復(fù)的兩個,都是對vse-console-basic 這個服務(wù)的匹配規(guī)則的限制,為什么寫兩段呢??
這兩段是或者的關(guān)系,即 路徑 /v1/console/basic/** 或者 /v1/console//basic/* 均可以
如果寫成
- id: vse-console-basic
uri: lb://vse-console-basic
predicates:
- Path=/v1/console/basic/**
- Path=/v1/console/*/basic/**
這個是并且的關(guān)系.........經(jīng)過實踐發(fā)現(xiàn)這個坑,弄了好久~~
這是其一
只是相當(dāng)于在gateway中的固定的配置,其實,gateway還可以動態(tài)路由的配置,其實這不是新東西,為什么這么說呢?
它的動態(tài)路由,其實就是讀取nacos中的配置文件,這樣在nacos中隨時修改,那么gateway都可以立即獲取感知到,如果改了剛剛routes中的配置,也就是相當(dāng)于動態(tài)路由了.
如何實現(xiàn)呢?
nacos:
data-id: route-console-gateway.json
group-id: DEFAULT_GROUP
timeout: 5000
就是這段代碼,它會去nacos讀取配置列表中data-id為 route-console-gateway的配置,如果讀取到了,那么其實也就是實現(xiàn)了動態(tài)路由煤辨。讀取不到称鳞,還是走剛剛的我粘貼中的yml配置文件