tnblog
首页
视频
资源
登录

.net core 配置中心(Apollo)

10198人阅读 2020/6/23 17:41 总访问:3467385 评论:3 收藏:0 手机
分类: .net后台框架

.netcore

.net core 配置中心(Apollo)

Apollo简介


Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
.Net客户端不依赖任何框架,能够运行于所有.Net运行时环境。
更多产品介绍参见Apollo配置中心介绍
本地快速部署请参见Quick Start
演示环境(Demo):
106.54.227.205
账号/密码: apollo/admin
如访问github速度缓慢,可以访问gitee镜像,不定期同步

通过 Docker 来进行安装 Apollo


注意

  • 请确保 Docker 已经安装好
  • 请确保 Docker-Compose 已经安装好
  • 尽量使用国内的加速器
  • 如果是阿里云服务器请在安全组规则中添加 8080与8070的端口

相关地址

Apollo安装地址:GitHub

项目地址:GitHub

安装


下载好Apollo后,打开终端到当前目录下执行命令 docker-compose up

其他命令

  1. # 也可以后台运行
  2. [root@xxxx]# docker-compose up -d
  3. # 更新到最新镜像
  4. [root@xxxx]# docker-compose pull
  5. # 停止镜像并删除
  6. [root@xxxx]# docker-compose down

安装与启动

安装与启动

访问你部署服务器的地址,登录到 dashboard:
http://Your_Server_IP:8070
用户名: apollo
密码: admin


configServer:
http://Your_Server_IP:8080

登录

登录

创建项目

创建TestApolloProject项目

创建TestApolloProject项目

创建TestApolloProject项目

创建环境变量

1

2

3

其他


查看历史记录

查看历史记录

更多功能

更多功能

创建.net core示例项目

安装依赖包

项目结构

修改内容


Program.cs
  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. CreateHostBuilder(args).Build().Run();
  6. }
  7. public static IHostBuilder CreateHostBuilder(string[] args) =>
  8. Host.CreateDefaultBuilder(args)
  9. .ConfigureAppConfiguration((hostBuilderContext,configurationBuilder)=>{
  10. //注入配置
  11. //把阿波罗的日志级别调整为最低
  12. LogManager.UseConsoleLogging(Com.Ctrip.Framework.Apollo.Logging.LogLevel.Trace);
  13. //从已加载的配置文件中读取,阿波罗的基础配置,并注入
  14. configurationBuilder.AddApollo(configurationBuilder.Build().GetSection("Apollo"))
  15. //注入默认配置
  16. .AddDefault(Com.Ctrip.Framework.Apollo.Enums.ConfigFileFormat.Properties);
  17. })
  18. .ConfigureWebHostDefaults(webBuilder =>
  19. {
  20. webBuilder.UseStartup<Startup>();
  21. });
  22. }
TestController.cs
  1. [Route("api/[controller]")]
  2. [ApiController]
  3. public class TestController : ControllerBase
  4. {
  5. private readonly IConfiguration _configuration;
  6. public TestController(IConfiguration configuration)
  7. {
  8. _configuration = configuration;
  9. }
  10. [HttpGet]
  11. public string GetENV_ABV2()
  12. {
  13. return _configuration["ENV_ABV2"];
  14. }
  15. }
appsettings.json
  1. {
  2. "Logging": {
  3. "LogLevel": {
  4. "Default": "Information",
  5. "Microsoft": "Warning",
  6. "Microsoft.Hosting.Lifetime": "Information"
  7. }
  8. },
  9. "Apollo": {
  10. "AppId": "TestApolloProject",
  11. "Env": "DEV",
  12. "MetaServer": "http://Your_Server_IP:8080/",
  13. "ConfigServer": [ "http://Your_Server_IP:8080/" ]
  14. },
  15. "AllowedHosts": "*"
  16. }

配置热更新展示

当前配置

获取当前配置成功

修改当前配置并发布

再次访问接口,达成热更新


补充

添加部门


输入organizations然后点击查询,在末尾添加上一行然后点击保存就可以了

添加json数据


普通的文本命名空间是不支持json数据的,所以我们需要添加新的命名空间,并且是json格式的。
找到项目的左下角,点击添加Namespace


然后根据下图所示添加json类型的命名空间,我们还可以看到它还可以支持xmlymlyamljsontxt.
最后点击保存。


最后我这里简单的写了个配置。


然后在我们的代码中需要做如下修改:添加好我们的命名空间,并规定好其中的格式。

  1. configurationBuilder.AddApollo(configurationBuilder.Build().GetSection("Apollo"))
  2. .AddNamespace("SWPrinterNS", ConfigFileFormat.Json);


在我们测试时使用热更新的方式

  1. public class IdentityModelConfig
  2. {
  3. public string Authority { get; set; }
  4. public string Audience { get; set; }
  5. public bool IsHttps { get; set; }
  6. public bool ValidateIssuer { get; set; }
  7. public bool ValidateAudience { get; set; }
  8. }
  1. services.Configure<IdentityModelConfig>(configuration.GetSection("Identity_Config"));
  1. [ApiVersion("1.0")]
  2. [Route("api/[controller]")]
  3. [ApiController]
  4. public class TestAPIController : ControllerBase
  5. {
  6. public readonly IOptionsMonitor<IdentityModelConfig> _IomIMC;
  7. public TestAPIController(
  8. IOptionsMonitor<IdentityModelConfig> IomIMC
  9. )
  10. {
  11. _IomIMC = IomIMC;
  12. }
  13. [HttpGet("ID4")]
  14. public string TestID4env()
  15. {
  16. return JsonConvert.SerializeObject(_IomIMC);
  17. }
  18. }

Apollo迁移


首先通过如下命令在旧的宿主机上进入容器,生成数据文件,并将数据文件放到旧的宿主机上。

  1. # 进入容器
  2. docker exec -it apollo-db /bin/bash
  3. # 生成apollo相关数据文件
  4. mysqldump -t -uroot --databases ApolloPortalDB --tables App AppNamespace Authorities Consumer ConsumerRole ConsumerToken Favorite Permission Role RolePermission UserRole Users --complete-insert > portal_dump.sql
  5. mysqldump -t -uroot --databases ApolloConfigDB --tables App AppNamespace AccessKey Cluster Commit Item Namespace Release ReleaseHistory --complete-insert > config_Pro_dump.sql
  6. exit
  7. # 复制数据文件到宿主机
  8. docker cp apollo-db:/config_Pro_dump.sql .
  9. docker cp apollo-db:/portal_dump.sql .


将这两个数据文件复制到新的宿主机上后,创建清理数据的cleardatafile.sql文件,命令如下:

  1. # 编辑清理数据文件
  2. cat << EOF > cleardatafile.sql
  3. Use ApolloPortalDB;
  4. truncate table App;
  5. truncate table AppNamespace;
  6. truncate table Authorities;
  7. truncate table Consumer;
  8. truncate table ConsumerRole;
  9. truncate table ConsumerToken;
  10. truncate table Favorite;
  11. truncate table Permission;
  12. truncate table Role;
  13. truncate table RolePermission;
  14. truncate table UserRole;
  15. truncate table Users;
  16. Use ApolloConfigDB;
  17. truncate table App;
  18. truncate table AppNamespace;
  19. truncate table AccessKey;
  20. truncate table Cluster;
  21. truncate table Commit;
  22. truncate table Item;
  23. truncate table Namespace;
  24. truncate table ReleaseHistory;
  25. EOF


然后在新的宿主机上,将三个文件复制到容器名为apollo-db的mysql数据库中,然后关闭apollo应用的运行,执行数据脚本,随后再启动apollo应用。

  1. docker cp cleardatafile.sql apollo-db:/
  2. docker cp config_Pro_dump.sql apollo-db:/
  3. docker cp portal_dump.sql apollo-db:/
  4. docker stop apollo-quick-start
  5. docker exec -it apollo-db /bin/bash
  6. mysql -uroot -A
  7. source /cleardatafile.sql
  8. use ApolloPortalDB;
  9. source /portal_dump.sql
  10. use ApolloConfigDB;
  11. source /config_Pro_dump.sql
  12. docker start apollo-quick-start


在完成迁移的最后需要到Apollo 仪表板中发布相关的Config。

更多连接请参考


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

评价

13655202412

2020/9/2 14:09:17

热更新是怎么配置的

尘叶心繁:@13655202412不是很清楚你的问题呢

2020/9/2 16:23:54 回复

13655202412:@尘叶心繁就是 阿波罗 配置,core 怎么做 才可以热重载 ,我看你文章 没有说到

2020/9/2 17:11:57 回复

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

.net core 使用 Kestrel

Kestrel介绍 Kestrel是一个基于libuv的跨平台web服务器 在.net core项目中就可以不一定要发布在iis下面了Kestrel体验可以使...

net core中使用cookie

net core中可以使用传统的cookie也可以使用加密的cookieNET CORE中使用传统cookie设置:HttpContext.Response.Cookies.Appe...

net core项目结构简单分析

一:wwwrootwwwroot用于存放网站的静态资源,例如css,js,图片与相关的前端插件等lib主要是第三方的插件,例如微软默认引用...

net core使用EF之DB First

一.新建一个.net core的MVC项目新建好项目后,不能像以前一样直接在新建项中添加ef了,需要用命令在添加ef的依赖二.使用Nug...

.net core使用requestresponse下载文件下载excel等

使用request获取内容net core中request没有直接的索引方法,需要点里边的Query,或者formstringbase64=Request.Form[&quot;f...

iframe自适应高度与配合net core使用

去掉iframe边框frameborder=&quot;0&quot;去掉滚动条scrolling=&quot;no&quot;iframe 自适应高度如果内容是固定的,那么就...

net core启动报错Unable to configure HTTPS endpoint. No server certificate was specified

这是因为net core2.1默认使用的https,如果使用Kestrel web服务器的话没有安装证书就会报这个错其实仔细看他的错误提示,其...

net core中使用url编码与解码操作

net core中暂时还没有以前asp.net与mvc中的server对象。获取url的编码与解码操作不能使用以前的server对象来获取。使用的是...

下载net core

官方下载地址:https://dotnet.microsoft.com/download 进来之后就可以看到最新的下载版本可以直接点击下载,也可以下载其...

net core使用依赖注入来装载EF的上下文对象

妹子情人节快乐~.net core中用了不少的依赖注入,官方文档中也推荐使用。这样使用依赖注入来管理ef对象,还是比较科学,比如...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术