1 个不稳定版本
0.1.0 | 2021年12月16日 |
---|
#561 in 配置
29KB
605 行
一个简单的库,用于查看环境变量,并订阅更改任何变量。
实时查看变量的实现。在变量更改时,获取数据快照或更改事件(删除/编辑)。
用法
当本地使用时,必须创建一个您将控制的观察者实例。持续时间 - 定义变量的轮询时间。默认 - Duration::from_millis(5 * 100)
let env_watcher = EnvironmentWatcher::new(Duration::from_secs(5));
接下来,订阅任何密钥,所有选项都在 段落 中描述
let sub_for_all = Subscribe::All;
let (data, rx) = env_watcher.subscribe(sub_for_all)?;
在这种情况下,我们收到了订阅时的数据快照,以及我们将通过它接收事件的通道。
假设我们有一个正在运行的服务器,如果 server.port
环境变量更改,应该重新启动,让我们试试写这个!
fn listen_environment() -> Result<(), Error> {
let env_watcher = EnvironmentWatcher::new(Duration::from_secs(5));
// An analogue of this subscription can be: Subscribe::PatternEnvs(vec!["server.*".to_string()]);
let sub_server = Subscribe::Envs(vec!["server.host".to_string(), "server.port".to_string()]);
let (data, rx) = env_watcher.subscribe(sub_server)?;
spawn(move || {
let receiver = rx.clone();
let data = data.clone();
loop {
let event = receiver.recv().unwrap();
match event {
ChangeState::Edit(k, v) => {
data.insert(k, v);
restart_server(&data);
}
ChangeState::Delete(k) => {
warn("Removed one of the server environment variables. In case of restarting the application, incorrect behavior may be expected!");
}
}
}
});
Ok(())
}
fn restart_server(data: &HashMap<String, String>) {
...
println("Restarting server");
}
您可以在 项目中看到一个更详细的例子。
数据的基础实现
EnvironmentData
作为基本快照保持者。在单独的线程中,如果环境中的值发生变化,则会更新值。
EnvironmentData 作为快照的主要存储。在单独的线程中,如果环境中的值发生变化,则会更新值。
您可以使用 data()
方法获取数据的快照
如果需要可变引用,则使用 ref_data()
派生用法
此模块提供了 3 个宏以简化您的工作。
init_env_watch!
- 基本存储初始化sub_env!
- 带快照返回和事件管理通道的订阅sub_env_snapshot!
- 基本快照实现
订阅环境变量
总共有3种订阅选项。
- 全部 - 订阅所有环境变量的变化
- Envs - 仅订阅特定键的订阅
- PatternEnvs - 通过正则表达式仅订阅特定键,得益于库
版本历史
查看变更日志
许可
MIT 许可证
依赖
~3–33MB
~447K SLoC