(精华)2020年9月28日 微服务 配置中心

配置中心

什么是配置中心

配置是用来动态修改程序执行的一种行为的机制

为什么要使用配置中心

安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏。
时效性:修改配置,需要重启服务才能生效。
局限性:无法支持动态调整:例如日志开关、功能开关。
因此,分布式配置中心应运而生!

配置中心类型方式

Apollo,java开发 ----- 运维成本比高

Apollo分为MySQL,Config Service,Admin Service,Portal四个模块,MySQL存储Apollo元数据和用户配置数据; Config Service提供配置的读取、推送等功能,客户端请求都是落到Config Service上; Admin Service提供配置的修改、发布等功能,Portal操作的服务就是Admin Service; Portal提供给用户配置管理界面;功能强大,社区活跃,但较为复杂,部署组件较多,运维成本比高

Consul, go开发

依赖:不依赖其他组件
应用内/外:属于外部应用,侵入性小
ACP原则:遵循CP原则(一致性+分离容忍) 服务注册稍慢,由于其一致性导致了在Leader挂掉时重新选举期间真个consul不可用。
版本迭代:目前仍然进行版本迭代
集成支持:支持SpringCloud K8S集成
访问协议:HTTP/DNS
雪崩保护:不支持雪崩保护
集成:SpringCloud集成,K8S集成

自动注销实例:不支持
界面:英文界面,不符合国人习惯
上手:复杂一点

Nacos,依赖:mysql -----

依赖:mysql
应用内/外:属于外部应用,侵入性小
ACP原则:通知遵循CP原则(一致性+分离容忍) 和AP原则(可用性+分离容忍)
版本迭代:目前仍然进行版本迭代,最近的提交是几天前
集成支持:支持Dubbo 、SpringCloud、K8S集成
访问协议:HTTP/动态DNS/UDP
雪崩保护:支持雪崩保护

Spring cloud config java开发 ----- Net支持比较差

自动注销实例:支持
界面:国产服务,中文界面,符合国人习惯
上手:极易,中文文档,案例,社区活跃
Consul实际上是和Nacos比较相似的产品,虽然Consul目前的主要发展方向放在了Service Mesh,但是Consul最初支持的服务发现和配置管理,也是Nacos的两大功能。虽然Nacos在Consul之后以与之相似的部署架构开源,但这并不意味着Nacos在功能和架构上也模仿Consul,Nacos的架构和功能是由阿里巴巴内部十年的运行演进经验得来,所以二者的比较也一定会让大家更加了解他们的定位和演进方向是完全不一样的。

微服务中如何使用Consul配置中心

Consul配置中心下载地址

consul地址已经使用过

Consul做配置中心运行原理

见图

Consul使用单服务单配置

条件

1、团队微服务体系

2、Consul

步骤

1、RuanMou.MicroService.Core 项目中Nuget下载Winton.Extensions.Configuration.Consul

2、配置文件中配置consul地址

"Consul_Url": "http://127.0.0.1:8500",

3、Program文件中配置

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
                    {

                        // 加载默认配置信息到Configuration
					   hostingContext.Configuration = config.Build();
                        // 加载consul配置中心配置
                        string consul_url = hostingContext.Configuration["Consul_Url"];
                        Console.WriteLine($"consul_url:{consul_url}");
                        config.AddConsul(
                                    "appsettings.json",
                                    options =>
                                    {
                                        options.ConsulConfigurationOptions = cco => { cco.Address = new Uri(consul_url); }; // 1、consul地址
                                        options.Optional = true; // 2、配置选项
                                        options.ReloadOnChange = true; // 3、配置文件更新后重新加载
                                        options.OnLoadException = exceptionContext => { exceptionContext.Ignore = true; }; // 4、忽略异常
                                    }
                                    );
                        
                            hostingContext.Configuration = config.Build(); // 5、consul中加载的配置信息加载到Configuration对象,然后通过Configuration 对象加载项目中
                    });
                });

4、动态加载配置信息

app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync(Configuration["Name"]);
                });
            });	

Consul使用多服务单配置

条件

1、Consul

2、微服务系统

步骤

1、RuanMou.MicroService.Core 项目中Nuget下载Winton.Extensions.Configuration.Consul

2、配置文件中配置consul地址

"Consul_Url": "http://127.0.0.1:8500",

3、Program文件中配置

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
                    {

                        // 加载默认配置信息到Configuration
					   hostingContext.Configuration = config.Build();
                        // 加载consul配置中心配置
                        string consul_url = hostingContext.Configuration["Consul_Url"];
                        Console.WriteLine($"consul_url:{consul_url}");
                        // 动态加载环境信息,主要在于动态获取服务名称和环境名称
                        var env = hostingContext.HostingEnvironment;
                        config.AddConsul(
                                     $"{env.ApplicationName}/appsettings.{env.EnvironmentName}.json",
                                    options =>
                                    {
                                        options.ConsulConfigurationOptions = cco => { cco.Address = new Uri(consul_url); }; // 1、consul地址
                                        options.Optional = true; // 2、配置选项
                                        options.ReloadOnChange = true; // 3、配置文件更新后重新加载
                                        options.OnLoadException = exceptionContext => { exceptionContext.Ignore = true; }; // 4、忽略异常
                                    }
                                    );
                        
                            hostingContext.Configuration = config.Build(); // 5、consul中加载的配置信息加载到Configuration对象,然后通过Configuration 对象加载项目中
                    });
                });

4、动态加载配置信息

app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync(Configuration["Name"]);
                });
            });	

Consul使用多服务多配置

条件

1、Consul

2、微服务系统

步骤

1、RuanMou.MicroService.Core 项目中Nuget下载Winton.Extensions.Configuration.Consul

2、配置文件中配置consul地址

"Consul_Url": "http://127.0.0.1:8500",

3、Program文件中配置

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    webBuilder.ConfigureAppConfiguration((hostingContext, config) =>
                    {

                        // 加载默认配置信息到Configuration
					   hostingContext.Configuration = config.Build();
                        // 加载consul配置中心配置
                        string consul_url = hostingContext.Configuration["Consul_Url"];
                        Console.WriteLine($"consul_url:{consul_url}");
                        // 动态加载环境信息,主要在于动态获取服务名称和环境名称
                        var env = hostingContext.HostingEnvironment;
                        config.AddConsul(
                                     $"{env.ApplicationName}/appsettings.{env.EnvironmentName}.json",
                                    options =>
                                    {
                                        options.ConsulConfigurationOptions = cco => { cco.Address = new Uri(consul_url); }; // 1、consul地址
                                        options.Optional = true; // 2、配置选项
                                        options.ReloadOnChange = true; // 3、配置文件更新后重新加载
                                        options.OnLoadException = exceptionContext => { exceptionContext.Ignore = true; }; // 4、忽略异常
                                    }
                                    );
                            config.AddConsul(
                                     $"{env.ApplicationName}/other.json",
                                    options =>
                                    {
                                        options.ConsulConfigurationOptions = cco => { cco.Address = new Uri(consul_url); }; // 1、consul地址
                                        options.Optional = true; // 2、配置选项
                                        options.ReloadOnChange = true; // 3、配置文件更新后重新加载
                                        options.OnLoadException = exceptionContext => { exceptionContext.Ignore = true; }; // 4、忽略异常
                                    }
                                    );
                        
                            hostingContext.Configuration = config.Build(); // 5、consul中加载的配置信息加载到Configuration对象,然后通过Configuration 对象加载项目中
                    });
                });

4、动态加载配置信息

app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync(Configuration["Name"]);
                });
            });	
已标记关键词 清除标记
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页