Consul
关于consul的环境搭建很简单,可以用docker临时搭建以下, consul关于KV存储的api也很简单,注意/v1/kv/是默认的公共路径
-- 运行docker
docker pull consul:latest
docker run --name consul -d -p 8500:8500 consul
--create /v1/kv/是公共路径
curl --request PUT --data '{"host":"localhost"}' http://127.0.0.1:8500/v1/kv/config/v1/local
-- Get
curl http://127.0.0.1:8500/v1/kv/config/v1/local
-- delete
curl --request DELETE http://127.0.0.1:8500/v1/kv/config/v1/local
在UI中看看值的内容:
Asp.net core5.0
首先说一下, 我是用vs2019创建调试好了的【虚拟机里面】, 传到git,在物理机上 用vscode打开运行, 目前感觉 vscode 还是没有vs 强大[vscode 运行时候需要输入controller http://localhost:5000/WeatherForecast]。
asp.net的配置的基础结构依赖于 Microsoft.Extensions.Configuration.Abstractions NuGet包中的一些内容。首先,IConfigurationProvider 是用于提供配置值的接口,然后IConfigurationSource 用于提供已实现上述接口的 provider 的实例。与直接实现 IConfigurationProvider 相比,可以继承一个名为 ConfigurationProvider 的类。
1.我们的方法就是利用 HttpClient 去获取 consul 中的配置。一旦我们得到返回的数据【这里是json串】 ,我们迭代每个键值对,解码 Base64 字符串,然后展平所有键和JSON对象,以便放入字典中返回
2.我们可以使用 consul 的变更通知。通过添加一个参数(最后一个索引配置的值)来实现的,HTTP 请求会一直阻塞,直到下一次配置变更(或 HttpClient 超时),方法 ListenToConfigurationChanges,以便在后台监听 consul 的阻塞 HTTP
3.写一个 ConfigurationSource 来创建我们的 provider,以及封装一些扩展方法。
4.我们定义一个配置类 ,然后方便项目 使用
以上是我们需要实现的功能, 首先我们修改consul的内容
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"option1": "value1_from_json",
"option2": 2,
"subsection": {
"suboption1": "subvalue1_from_json"
},
"student": [
{
"Name": "Gandalf",
"Age": "1000"
},
{
"Name": "Harry",
"Age": "17"
}
],
"AllowedHosts": "*",
"MongodbHost": {
"Connection": "mongodb://127.0.0.1:27018",
"DataBase": "TemplateDb",
"Table": "CDATemplateInfo"
}
}
其次 创建读取consul相关的代码[我这里是放在一起的]
using Microsoft.Extensi