現在平臺涉及的微服務的路由信息都寫在網關服務的配置文件中了,這樣導致開發某個微服務時,不能隨便改服務名。因爲改了服務名,網關就找不到該服務了,所以必須在本地將網關服務和要調試的服務程序一同啓動,這樣可以在本地網關服務的配置文件中將新服務名加進去,很麻煩。
今天我調試平臺管理系統中的區域監測數據模塊,就遇到了這個麻煩,所以將網關服務中增加路由信息自動更新的邏輯。
1、網關服務啓動時,保留配置文件的路由信息的基礎上,同時從服務中心讀取上面註冊的全部服務。按照如下規則加入到路由表中。規則和以前的配置保持一致,形式如下:
path=/government/**
serviceId=government
這個government就是從服務中心讀取的名稱。
主要程序見網關係統裏的CustomRouteLocator.java
2、因爲服務中心將應用名都是大寫,爲了寫url方便,我們在添加路由信息時,將服務名都改成了大寫。對應ContextPathConfig裏的applicationName得加上toLowerCase(結果發現了ContextPathConfig的問題,見https://my.oschina.net/u/3756527/blog/1594004)。
3、有了這個功能,以後使用時,自己的微服務隨便起個名字,就可以通過網關找到了。
比如我再調平臺管理系統,將sysadminX改成了sysadminX_Arthur,不用修改網關配置,直接可通過網關訪問該程序。
4、爲了避開權限驗證,大家可以統一個特殊標記,讓名字裏帶上這個標記,就放開了驗證。