基于winserver部署Apollo初次体验(附.net客户端demo)
前言
配置中心伴随着这几年分布式系统演变和微服务架构的兴起,已经成为必不可少的需求之一。试下一下如果哪天公司的所有应用服务,从公司服务器迁移到云服务,成千上万的配置,修改起来是多么耗时费劲的事(我们公司就是……)。
配置中心主要有以下特点:
- 配置动态化
- 管理集中化
修改配置不需要重新发布配置文件,而且可以复用,同一个的配置只需要修改一次,省时省力。通过后台统一管理,修改、查看,部分产品还支持配置版本管理。
Why Apollo
- 国产
- 开源
- 功能强大
首先是支持国产,同时在遇到问题也可以良好的和国人交流沟通。其次功能很全,满足公司的所有需要,不需要二次开发。
优势
阿波罗的功能非常强大,几乎满足一般的分布式系统的使用要求,重点主要如下:
- 配置多维度
- application (应用)
- environment (环境)
- cluster (集群)
- namespace (命名空间)
- 版本发布管理
- 历史查看
- 版本回滚
- 后台权限管理
- 发布审核
- 操作审计
- 更新机制
- 推
- 拉
- 客户端监控
- 客户端实例查看
- 配置实用实例查看
缺点
强大的功能,必然伴随少许缺点:
- 一定的学习成本
- 部署繁杂
官方文档说明部署简单,我认为不然,依赖jdk1.8,(我试了1.9部署Quick Start版本失败了),mysql,脚本需要自己导入,在windows平台还需要gitbash。
总的来说利大于弊,还是值得去使用的。
准备
部署
注意jdk的环境变量配置
导入脚本
在刚下载apollo-build-scripts里sql目录下的两个脚本导入到mysql里
apolloconfigdb.sql
apolloportaldb
修改项目数据库配置
编辑demo.sh,找到下面的配置项,修改为对应的数据库信息
# apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password= # apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=
启动
打开cmd,切换到刚下载的apollo-build-scripts目录下。
cd C:\Users\chengong\source\repos\apollo-build-scripts demo.sh start
==== starting service ====
Service logging file is ./service/apollo-service.log
Started []
Waiting for config service startup.......
Config service started. You may visit http://localhost:8080 for service status now!
Waiting for admin service startup....
Admin service started
==== starting portal ====
Portal logging file is ./portal/apollo-portal.log
Started []
Waiting for portal startup......
Portal started. You can visit http://localhost:8070 now!
如果控制台输出以上为启动成功
初体验
输入浏览器输入http://localhost:8070
账号:apollo
密码:admin
可以见到默认的有一个Sample App项目,点进去,就可以见到下图
.net客户端
创建一个控制台项目,下载apollo.net包
nuget install apollo.net
static void Main(string[] args)
{
Config config = ConfigService.GetAppConfig();
config.ConfigChanged += OnChanged; while (true)
{
Thread.Sleep();
var timeout = config.GetProperty("timeout", "");
Console.WriteLine(timeout);
}
} private static void OnChanged(object sender, ConfigChangeEventArgs changeEvent)
{
Console.WriteLine("Changes for namespace {0}", changeEvent.Namespace);
foreach (string key in changeEvent.ChangedKeys)
{
ConfigChange change = changeEvent.GetChange(key);
Console.WriteLine("Change - key: {0}, oldValue: {1}, newValue: {2}, changeType: {3}", change.PropertyName, change.OldValue, change.NewValue, change.ChangeType);
}
}
另外在app.config填写以下变量
<!-- Change to the actual app id -->
<add key="AppID" value="SampleApp"/>
<!-- Should change the apollo config service url for each environment -->
<add key="Apollo.DEV.Meta" value="http://localhost:8080"/>
<add key="Apollo.FAT.Meta" value="http://localhost:8080"/>
<add key="Apollo.UAT.Meta" value="http://localhost:8080"/>
<add key="Apollo.PRO.Meta" value="http://localhost:8080"/>
启动控制台程序
修改配置并发布
此时返回控制台程序查看
这个时候我们通过监听程序监听到配置在后台被修改了,同时能获取到最新配置值
配置更新的推拉机制
从上图看到,阿波罗配置更新具备推和拉两种方式,在后台修改并发布后,会及时将配置推给客户端,假如没推成功,客户端会通过后台线程定时更新。
如果客户端与服务端发生了网络分区,此时可以通过客户端获取本地文件缓存的配置数据,让系统正常运作。
缓存数据默认存储在C:\opt\data
从以上来看,阿波罗在可用性设计上还是很不错的。
结束
最近公司在选型配置中心,因此在玩阿波罗的时候同时记录其过程。
客户端demo:https://github.com/SkyChenSky/Apollo.Demo
基于winserver部署Apollo初次体验(附.net客户端demo)的更多相关文章
- 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)
基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势) 前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...
- 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)
概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松. ...
- Docker部署Apollo配置中心
1.Apollot简述 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于 ...
- ASP.NET Core Identity Hands On(1)——Identity 初次体验
ASP.NET Core Identity是用于构建ASP.NET Core Web应用程序的成员资格系统,包括成员资格.登录和用户数据存储 这是来自于 ASP.NET Core Identity 仓 ...
- 在docker中初次体验.net core 2.0
.net core的跨平台有了Linux,不能没有docker……网上的系列文章一大推,特别是docker还有了中文官网:https://www.docker-cn.com/ .上面说的很清楚了,这里 ...
- windows部署Apollo
前言 配置中心伴随着这几年分布式系统演变和微服务架构的兴起,已经成为必不可少的需求之一.试下一下如果哪天公司的所有应用服务,从公司服务器迁移到云服务,成千上万的配置,修改起来是多么耗时费劲的事(我们公 ...
- Win10上部署Apollo配置中心
基于Docker在Win10上部署Apollo配置中心 https://www.jianshu.com/p/a1215056ce75 http://nobodyiam.com/2016/07/09/i ...
- docker-compose 部署 Apollo 自定义环境
Apollo 配置中心是什么: Apollo是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性. ...
- kubebuilder实战之二:初次体验kubebuilder
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- iOS实现应用更新及强制更新
调用更新接口返回字段: result = { descr = ""; isupdate = 1;//是否更新 ...
- [OC] UITableView 与 UItableViewCell 的使用
UITableView //UIViewController里添加一个UITableView @interface ViewController : UIViewController<UITa ...
- JAVA基础复习与总结<九> 线程的基本概念_Thread继承创建线程
多线程 一.线程的概念 1.1 程序.进程.线程 程序:Program 是一个静态的概念 进程:Process 是一个动态的概念 进程是程序的一次动态执行过程,占用特定的地址空间. 每个进程都是独立的 ...
- python3 替换字符串中指定位置字符
大家都知道字符串在python中是不可变数据类型,那么我们如何替换字符串中指定位置的字符呢? 字符串转换列表替换并转换解决: def replace_char(string,char,index): ...
- 我的 FPGA 学习历程(14)—— PWM 脉冲宽度调制
PWM 是一种调节输出功率的技术(俗称调压),其原理在于改变输出方波的占空比,具体输出见下图: 输出信号为电压值,当负载为恒阻时,上图中的输出功率分别为 25%.50%.75%. 实现方法如下: 设置 ...
- async与defer
<script>元素的几种常见属性: async 异步加载,立即下载,不应妨碍页面其他操作,标记为 async 的异步脚本并不保证按照指定的先后顺序执行,因此异步脚本不应该在加载期间修改 ...
- centos7安装可视化界面
使用VMWare安装好centos7镜像后开始安装centos桌面. 一.输入命令 yum groupinstall "GNOME Desktop" "Graphical ...
- MD5加密过时方法替换
使用System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile进行MD5加密时,会出现已过时 /// < ...
- JavaScript经典作用域问题(转载)
题目 var a = 10; function test(){ a = 100; console.log(a); console.log(this.a); var a; console.log(a); ...
- Vs 开发时无法断点问题
1.清除解决方案 2.重新编译 3.删除项目目录下的obj 和 bin 4.在vs中配置 工具--项目--调试--去除勾选 要求源文件与原始版本完全匹配 关于调试问题 1.关闭诊断工具, 工具 =&g ...