通過監控發現生產環境中一些服務的問題,需要將這些服務暫時摘除掉。有的時候,比如:服務呼叫量大,需要同步轉非同步;資料庫存在,但是查詢速度慢,這時需要暫停服務,立即修復;新開發的功能上線進行灰度測試,不確定新的功能是否有影響,一旦有影響就直接切回老的版本。配置可以存放在配置檔案,redis/zookeeper或者資料庫等。
1.配置檔案實現開關配置
配置檔案:switcher.properties
#不呼叫分片快取
user.not
.call
.sharding
.redis
.cache=true
1.1.通過jdk7提供的watchservice,來監聽本地檔案系統中配置檔案的變化,**片段如下:public void startwatch() throws exception catch (ioexception e)
}logger.info(watchevent.context() + " comes to " + watchevent.kind());
});boolean valid = key.reset();
if (!valid)
} catch (interruptedexception e)
}});
watchthread.setdaemon
(true);
watchthread.start
(); runtime.getruntime
().addshutdownhook
(new thread(() -> catch (ioexception e)
}));
}
1.2.新建乙個switchs類封裝public
class switchs
}}
1.3.使用開關if (switchs.user.notcallinfile())
2.配置中心實現開關配置
可以通過zookeeper,disconf、apollo、spring cloud config、consul等作為配置中心,筆者通過consul作為講解,主要是consul提供多資料中心、kv儲存、服務發現等特性,擁有簡單的web ui。
# uzip consul_1.0.2_linux_386
2.2.啟動consul./consul agent -server
-bootstrap
-expect
1-data
-dir /tmp/consul -bind
0.0.0
.0-client
0.0.0
.0-ui
&
2.3.在consul新增/建立開關值curl -xput
-d'true' http://localhost:8500/v1/kv/switchs/user.not.call.sharding.redis.cache
備註:也可以直接通過訪問web ui直接新增/修改2.3.在應用中**中引入配置中心
pulic void startwatch() , value:{}",
value.getkey().substring(system.length() + 1),
value.getvalueasstring().get());
index = index.max(biginteger.valueof(value.getmodifyindex()));
}properties = _properties;
} catch (consulexception e) catch (interruptedexception e1) }}
if (needbreak.get())
}});
watchthread.run
(); needbreak.set
(false);
watchthread.setdaemon
(true);
watchthread.start
(); }
備註:使用方式跟配置檔案實現開關配置一樣使用
Nacos配置中心 多配置檔案載入
新增配置,載入多個配置檔案 spring.cloud.nacos.config.server addr 127.0.0.1 8848 spring.profiles.active dev 該配置影響統一配置中心中的dataid,之前已經配置過 spring.cloud.nacos.config.na...
SpringCloudBus實現配置檔案動態更新
在springcloud之配置中心 config 的使用 的基礎上加上springcloudbus實現配置檔案動態更新 在此之前需要修改版本,否則會出現 endpoint id bus env contains invalid characters,please migrate to a valid...
nacos配置中心 多配置檔案的讀取順序
server port 56020 spring name nacos restful consumer 服務名 cloud nacos discovery server addr 127.0.0.1 8848 服務發現中心位址 namespace qwer34f3 2e55cd7qwer conf...