配置檔案與配置中心實現人工開關降級

2021-08-14 08:10:30 字數 2228 閱讀 1916

通過監控發現生產環境中一些服務的問題,需要將這些服務暫時摘除掉。有的時候,比如:服務呼叫量大,需要同步轉非同步;資料庫存在,但是查詢速度慢,這時需要暫停服務,立即修復;新開發的功能上線進行灰度測試,不確定新的功能是否有影響,一旦有影響就直接切回老的版本。配置可以存放在配置檔案,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...