首页
视频
资源
登录
原
精
.net core 配置中心(Apollo)
8625
人阅读
2020/6/23 17:41
总访问:
2612319
评论:
3
收藏:
0
手机
分类:
.net后台框架
![.netcore](https://img.tnblog.net/arcimg/hb/c857299a86d84ee7b26d181a31e58234.jpg ".netcore") >#.net core 配置中心(Apollo) [TOC] Apollo简介 ------------ <br/> >Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。 Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。 .Net客户端不依赖任何框架,能够运行于所有.Net运行时环境。 更多产品介绍参见Apollo配置中心介绍 本地快速部署请参见<a href="https://github.com/ctripcorp/apollo/wiki/Quick-Start">Quick Start</a> 演示环境(Demo): 106.54.227.205 账号/密码: apollo/admin 如访问github速度缓慢,可以访问gitee镜像,不定期同步 通过 Docker 来进行安装 Apollo ------------ <br/> >###注意 - 请确保 Docker 已经安装好 - 请确保 Docker-Compose 已经安装好 - 尽量使用国内的加速器 - 如果是阿里云服务器请在安全组规则中添加 8080与8070的端口 ![](https://img.tnblog.net/arcimg/hb/84c6139f63c84067a12d95e9dcc93900.png) >###相关地址 Apollo安装地址:<a href="https://github.com/AiDaShi/GeekTimeLearning/tree/master/TestApolloProject/NET-Core-deploy-infrastructure-apollo">GitHub</a> 项目地址:<a href="https://github.com/AiDaShi/GeekTimeLearning/tree/master/TestApolloProject">GitHub</a> >###安装 <br/> >下载好Apollo后,打开终端到当前目录下执行命令 `docker-compose up` 其他命令 ```bash # 也可以后台运行 [root@xxxx]# docker-compose up -d # 更新到最新镜像 [root@xxxx]# docker-compose pull # 停止镜像并删除 [root@xxxx]# docker-compose down ``` >###安装与启动 ![安装与启动](https://img.tnblog.net/arcimg/hb/71a4d1e4e8964951beb95a351245f1fc.png "安装与启动") >访问你部署服务器的地址,登录到 dashboard: http://Your_Server_IP:8070 用户名: apollo 密码: admin <br/> configServer: http://Your_Server_IP:8080 ![登录](https://img.tnblog.net/arcimg/hb/5d2b0bf9cf7b4553b69bbd841073630e.png) ![登录](https://img.tnblog.net/arcimg/hb/cc9a7dd858784a56853c9df3307c9989.png) 创建项目 ------------ >###创建TestApolloProject项目 ![创建TestApolloProject项目](https://img.tnblog.net/arcimg/hb/d81083d74fda419aadda1dfbce62a284.png) ![创建TestApolloProject项目](https://img.tnblog.net/arcimg/hb/49c02eaf14e24f00a82d17d866db5be1.png) >###创建环境变量 ![1](https://img.tnblog.net/arcimg/hb/fec10e2c2a7449c98255e910f1ae08d2.png) ![2](https://img.tnblog.net/arcimg/hb/faae5426628d414fbe4e18be36b3c380.png) ![3](https://img.tnblog.net/arcimg/hb/09602111e14c4c43ab3f0f5ec8cd006e.png) >###其他 <br/> >查看历史记录 ![查看历史记录](https://img.tnblog.net/arcimg/hb/17504a64ddfe46c693a7d097b094a8da.png) >更多功能 ![更多功能](https://img.tnblog.net/arcimg/hb/f2ddb6c4f36048019e37318d49a4f5cc.png) 创建.net core示例项目 ------------ >###安装依赖包 ![](https://img.tnblog.net/arcimg/hb/7abe83d29a224626a47c1779fe9f341e.png) >###项目结构 ![](https://img.tnblog.net/arcimg/hb/e124c452605445afa1988cc7e51b5285.png) >###修改内容 <br/> ><font style="color:#2ecc71;font-weight:bold;">Program.cs</font> ```csharp public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostBuilderContext,configurationBuilder)=>{ //注入配置 //把阿波罗的日志级别调整为最低 LogManager.UseConsoleLogging(Com.Ctrip.Framework.Apollo.Logging.LogLevel.Trace); //从已加载的配置文件中读取,阿波罗的基础配置,并注入 configurationBuilder.AddApollo(configurationBuilder.Build().GetSection("Apollo")) //注入默认配置 .AddDefault(Com.Ctrip.Framework.Apollo.Enums.ConfigFileFormat.Properties); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); } ``` ><font style="color:#2ecc71;font-weight:bold;">TestController.cs</font> ```csharp [Route("api/[controller]")] [ApiController] public class TestController : ControllerBase { private readonly IConfiguration _configuration; public TestController(IConfiguration configuration) { _configuration = configuration; } [HttpGet] public string GetENV_ABV2() { return _configuration["ENV_ABV2"]; } } ``` ><font style="color:#f1c40f;font-weight:bold;">appsettings.json</font> ```json { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "Apollo": { "AppId": "TestApolloProject", "Env": "DEV", "MetaServer": "http://Your_Server_IP:8080/", "ConfigServer": [ "http://Your_Server_IP:8080/" ] }, "AllowedHosts": "*" } ``` 配置热更新展示 ------------ >当前配置 ![](https://img.tnblog.net/arcimg/hb/216d5a820667444984597f0db8c64642.png) >获取当前配置成功 ![](https://img.tnblog.net/arcimg/hb/2b864beea95d4af5b1f724a425208676.png) >修改当前配置并发布 ![](https://img.tnblog.net/arcimg/hb/3ee6e9ae69654667b4a3572cdcf1e115.png) >再次访问接口,达成热更新 ![](https://img.tnblog.net/arcimg/hb/3dc15d1abcca4cb59b60aac1a244726a.jpg) ![](https://img.tnblog.net/arcimg/hb/1f9b0ef2900d431ea8fd2e816d4b5fba.png) 补充 ------------ >### 添加部门 ![](https://img.tnblog.net/arcimg/hb/0b7ffb2c381d48d19ef34f5400796419.png) tn2>输入`organizations`然后点击查询,在末尾添加上一行然后点击保存就可以了 ![](https://img.tnblog.net/arcimg/hb/d1e9e12cccb940719f9036f814d78fdb.png) >### 添加json数据 tn2>普通的文本命名空间是不支持json数据的,所以我们需要添加新的命名空间,并且是json格式的。 找到项目的左下角,点击添加Namespace ![](https://img.tnblog.net/arcimg/hb/9b8867e927874520826839f6f3e1e234.png) tn2>然后根据下图所示添加json类型的命名空间,我们还可以看到它还可以支持`xml`、`yml`、`yaml`、`json`、`txt`. 最后点击保存。 ![](https://img.tnblog.net/arcimg/hb/1cac30e9eeba44c48d1eedc756ab242d.png) tn2>最后我这里简单的写了个配置。 ![](https://img.tnblog.net/arcimg/hb/f041763688c04f5aaa4e2fc090e1bca3.png) tn2>然后在我们的代码中需要做如下修改:添加好我们的命名空间,并规定好其中的格式。 ```csharp configurationBuilder.AddApollo(configurationBuilder.Build().GetSection("Apollo")) .AddNamespace("SWPrinterNS", ConfigFileFormat.Json); ``` tn2>在我们测试时使用热更新的方式 ```csharp public class IdentityModelConfig { public string Authority { get; set; } public string Audience { get; set; } public bool IsHttps { get; set; } public bool ValidateIssuer { get; set; } public bool ValidateAudience { get; set; } } ``` ```csharp services.Configure<IdentityModelConfig>(configuration.GetSection("Identity_Config")); ``` ```csharp [ApiVersion("1.0")] [Route("api/[controller]")] [ApiController] public class TestAPIController : ControllerBase { public readonly IOptionsMonitor<IdentityModelConfig> _IomIMC; public TestAPIController( IOptionsMonitor<IdentityModelConfig> IomIMC ) { _IomIMC = IomIMC; } [HttpGet("ID4")] public string TestID4env() { return JsonConvert.SerializeObject(_IomIMC); } } ``` ![](https://img.tnblog.net/arcimg/hb/c0590c0f4d4e4f07a22e9eec0abcda1f.png) Apollo迁移 ------------ tn2>首先通过如下命令在旧的宿主机上进入容器,生成数据文件,并将数据文件放到旧的宿主机上。 ```bash # 进入容器 docker exec -it apollo-db /bin/bash # 生成apollo相关数据文件 mysqldump -t -uroot --databases ApolloPortalDB --tables App AppNamespace Authorities Consumer ConsumerRole ConsumerToken Favorite Permission Role RolePermission UserRole Users --complete-insert > portal_dump.sql mysqldump -t -uroot --databases ApolloConfigDB --tables App AppNamespace AccessKey Cluster Commit Item Namespace Release ReleaseHistory --complete-insert > config_Pro_dump.sql exit # 复制数据文件到宿主机 docker cp apollo-db:/config_Pro_dump.sql . docker cp apollo-db:/portal_dump.sql . ``` tn2>将这两个数据文件复制到新的宿主机上后,创建清理数据的`cleardatafile.sql`文件,命令如下: ```bash # 编辑清理数据文件 cat << EOF > cleardatafile.sql Use ApolloPortalDB; truncate table App; truncate table AppNamespace; truncate table Authorities; truncate table Consumer; truncate table ConsumerRole; truncate table ConsumerToken; truncate table Favorite; truncate table Permission; truncate table Role; truncate table RolePermission; truncate table UserRole; truncate table Users; Use ApolloConfigDB; truncate table App; truncate table AppNamespace; truncate table AccessKey; truncate table Cluster; truncate table Commit; truncate table Item; truncate table Namespace; truncate table ReleaseHistory; EOF ``` tn2>然后在新的宿主机上,将三个文件复制到容器名为apollo-db的mysql数据库中,然后关闭apollo应用的运行,执行数据脚本,随后再启动apollo应用。 ```bash docker cp cleardatafile.sql apollo-db:/ docker cp config_Pro_dump.sql apollo-db:/ docker cp portal_dump.sql apollo-db:/ docker stop apollo-quick-start docker exec -it apollo-db /bin/bash mysql -uroot -A source /cleardatafile.sql use ApolloPortalDB; source /portal_dump.sql use ApolloConfigDB; source /config_Pro_dump.sql docker start apollo-quick-start ``` tn2>在完成迁移的最后需要到Apollo 仪表板中发布相关的Config。 更多连接请参考 ------------ tn2>Apollo 项目地址:https://github.com/ctripcorp/apollo Apollo.net 项目地址:https://github.com/ctripcorp/apollo.net/tree/dotnet-core/ .Net客户端使用指南:https://github.com/ctripcorp/apollo/wiki/.Net%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
168篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
18篇
threejs
2篇
人物
1篇
嵌入式
2篇
python
13篇
HuggingFace
8篇
pytorch
9篇
opencv
6篇
Halcon
1篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术