可以在启动时初始化Consul Key Value商店吗?

时间:2017-07-28 05:10:02

标签: docker .net-core consul consul-kv

我可以使用/ consul / config目录在启动时初始化Consul服务。我希望能够在启动Consul容器时将我的应用程序设置初始化到Consul kv商店。这可能吗?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

我想要一个简单的方法在Consul中为微服务项目设置应用程序设置。我确定有很多现有的工具,但我想要一些轻量级的东西,适合我的开发过程。因此,我没有尝试使用@mgyongyosi的一些建议,而是编写了一个快速的dotnet控制台应用程序来执行(不是那么)繁重的工作。在项目根目录下,我创建了一个目录结构Consul/kv。该路径下的子目录表示Consul KV存储中的键,叶子上的json文件表示应用程序设置。请注意,每个叶子目录只能有一个json个文件。该应用程序使用Consul.NET nuget包与Consul进行通信。

using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Consul;

namespace ConfigureConsulKv
{
    class Program
    {
        private static readonly string _basePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                                                                "Projects", "MyProject", "Consul", "kv");

        static void Main(string[] args)
        {
            RecurseDirectory(_basePath);
        }

        static void RecurseDirectory(string path)
        {
            foreach (var dir in Directory.EnumerateDirectories(path)) RecurseDirectory(dir);

            var file = Directory.EnumerateFiles(path, "*.json").FirstOrDefault();
            if (!string.IsNullOrWhiteSpace(file))
            {
                var key = path.Substring(_basePath.Length + 1);
                var json = File.ReadAllBytes(file);
                Console.WriteLine($"key {key} file {file}");
                using (var client = new ConsulClient())
                {
                    var attempt = client.KV.Put(new KVPair(key) { Value = json }).Result;
                    Console.WriteLine($"status {attempt.StatusCode}");
                }
            }
        }
    }
}