專案場景:
這兩天不是一直在搞簡化配置、使用公共配置、我的服務可以透過閘道器訪問這幾個任務嘛,也是不斷地踩坑補知識才總算把這幾個任務都搞好了,下面就是記錄過程中遇到的問題。
使用公共配置
因為發現專案使用的配置檔案過多,有application、application-test.yml、bootstrap.yml、遠端nacos配置,我想不能搞得簡單些就儘量把所有配置都放到線上,本地只是做區分麼,然後自己惡補了下application和bootstrap區別
application和bootstrap區別和優先順序
順序:bootstrap.properties > bootstrap.yml > application.properties > application.yml
優先順序:properties>yml
檔案位置優先順序:
src裡的config資料夾>>根目錄>>resource裡的config資料夾>>resource下的
小結:
同樣的yml,bootstrap比application優先順序高,是由父上下文載入的,而application是由子載入
bootstrap一般配置的是引導配置,連線的是spring cloud配置中心,預設本地不能覆蓋遠端配置,遠端配置一些加密的資訊
使用公共配置common.yml
直接上配置程式碼,注意
和 引數裡面
chixxxxx:
nacos:
server-addr: 123.123.000.000:8848
spring:
profiles:
active: test
application:
name: chixxxxx-gateway
group: chixxxxx_GROUP
cloud:
nacos:
discovery:
group: ${spring.application.group}
namespace: ${spring.profiles.active}
server-addr: ${chixxxxx.nacos.server-addr}
config:
group: ${spring.application.group}
namespace: ${spring.profiles.active}
server-addr: ${chixxxxx.nacos.server-addr}
prefix: ${spring.application.name}
shared-configs:
- data-id: common.yml
group: ${spring.application.group}
extension-configs:
- data-id: chixxxxx-gateway-test.yml
group: ${spring.application.group}
配置閘道器服務
我之前上家公司是配過閘道器的,其實就是指定服務+斷言路徑就行了,但是這邊還是有點區別,首先是nginx.conf那邊,先做了個匹配路徑轉發到閘道器的一個操作,如下
location /api/backend/ {
proxy_pass http://localhost:8001;
}
提前轉發到閘道器,然後閘道器配置
- id: platform後臺介面
uri: lb://chixxxx-platform
order: 1000
predicates:
- Path=/api/backend/**
filters:
- StripPrefix=0
- name: RequestRateLimiter
args:
key-resolver: '#{@hostAddrKeyResolver}'
redis-rate-limiter:
replenishRate: 20
burstCapacity: 50
這裡面尤其要注意的是StripPrefix這個引數,之前沒有太注意,還弄出個404,看了些講解才知道這個就是去掉我一開始請求的路徑上的字元,如:StripPrefix=1,那麼請求到服務就是backend/user/detail?id=1;StripPrefix=2,user/detail?id=1,這個數字代表去掉幾個/分割的字串。
請求服務轉發失敗
這個又是什麼呢,我照樣子請求url,但是返回報500,然後我檢視了下日誌
ERROR 1399157 [reactor-http-epoll-4] org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler [bfc53f9d-5959] 500 Server Error for HTTP GET "/api/backend/appVersion/detail?id=12"
就是伺服器錯誤,我再看目標伺服器上的日誌,沒有新增日誌,然後就因為報錯資訊有限,我前前後後花了靠一天時間最後透過“同義千問”找到靈感-好好對一下服務狀態是否正常,開啟:服務列表-服務詳情,看到健康狀態是ture啊,那為啥報500,再看ip地址,這個ip寫的是:172.17.0.5這個好像docker或者內網地址啊,一開始懷疑內網,但是想想不會啊,我的伺服器在外頭的,然後再去目標伺服器執行:docker inspect xxx
,看到就是這個,哦~原來把docker分配的ip註冊到nacos上了,我應該是要把伺服器ip註冊上去,透過千問需要設定
spring:
cloud:
nacos:
discovery:
ip: 123.123.123.123
然後重新發下,再去詳情看下,ip變了,還有記得把埠號開放!最後再透過postman請求下就可以透過閘道器地址訪問到了
小結
最近這個禮拜做的這幾個任務都是我自發去做的,因為看到了配置比較亂現在使用者數比較少可以折騰,避免後期人多了再折騰損耗比較大,同時對gateway這塊知識查漏補缺也有了相應的提高。