asp.net core系列 76 Apollo 快速安装模式下填坑和ASP.NetCore结合使用
前言:由于公司占时没有运维,出于微服务的需要,Apollo只能先装在windows 阿里云上跑起来,由于环境及网络等问题,在安装过程中遇到很多坑,算是一个个坑填完后,最终实现。
一. java jdk环境
java jdk 1.8下载地址: https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
建议JDK安装目录不要带有中文、【空格】、特殊符号等,例如:Program Files 这种会导致使用Quick Start 里面的./demo.sh start出错,会提示【/c/Program: No such file or directory】 就是因为空格的问题
java jdk官方下载包时需要登录, 我的用户名为:邮箱,密码:Hsr123456。安装jdk时选择目录如下:

安装后,配置环境变量,查看版本信息:

二.mysql 环境
2.1 安装mysql 5.7及以上
2.2 创建ApolloPortalDB 数据库
sql文件在apollo-build-scripts-master包中,该包下载看第三节。
导入命令如下所示:

导入成功后,可以通过执行以下sql语句来验证


2.3 创建ApolloConfigDB数据库
导入命令如下所示:

导入成功后,可以通过执行以下sql语句来验证:

2.4 配置数据库连接信息
需要编辑修改demo.sh(看第三节),修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息。
三. 下载快速启动包
apollo下载地址:https://github.com/nobodyiam/apollo-build-scripts 有58M下载有些慢
配置demo.sh文件内容中的mysql连接设置
# 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=
四. Quick-Start 启动Apollo配置中心
下载git bash, 需要bash环境,下载地址: https://gitforwindows.org/, 安装后默认路径在C:\Users\Administrator下,在bush中使用ls查看文件

将apollo-build-scripts-master目录移到C:\Users\Administrator下
启动apolloQuick Start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。启动功能如下所示:

如果启动失败,查看service/apollo-service.log 或 portal/apollo-portal.log日志进一步分析, 操作系统重启后,需要再打开git bush手动启用demo.sh文件。
启动成功后访问http://localhost:8070/signin 输入用户名apollo,密码admin后登录

配置二个app项目如下所示:

五. asp.net core的客户端使用
asp.net core系列 73 Exceptionless+Nlog以及Apollo介绍有介绍。几个重要的环节是:
1.配置appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"apollo": {
"AppId": "SearchService",
"MetaServer": "http://192.168.2.211:8080/",
"Env": "Dev",
"Meta": {
"DEV": "http://192.168.2.211:8080/"
}
}
}
2.添加引用
Install-Package Microsoft.Extensions.Configuration -Version 2.2.
Install-Package Com.Ctrip.Framework.Apollo.Configuration -Version 2.0.
3.Program.cs 配置
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder=>builder
.AddApollo(builder.Build().GetSection("apollo"))
//.AddNamespace("")
.AddDefault())
.UseStartup<Startup>();
4.本地缓存
Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。
本地缓存路径位于C:\opt\data\{appId}\config-cache,所以请确保C:\opt\data\目录存在,且应用有读写权限
5. ValuesController 使用
public ValuesController(IConfiguration configuration)
{
_configuration = configuration;
string mysqlConn = _configuration.GetSection("mysql").Value;
}
6. 添加的项目如下所示:

7. 动态修改配置参数
在apollo项目中将mysql的端口修改为3309,点击发布, 在asp.net core 启动项目中刷新页面。获取的配置已动态变化,无需重启asp.net core项目,如下所示:
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
string mysqlConn = _configuration.GetSection("mysql").Value;
return new string[] { mysqlConn};
}

.net core配置参考:https://github.com/ctripcorp/apollo.net/blob/dotnet-core/Apollo.Configuration/README.md
六.生产环境遇到的问题
在windows服务器部署apollo,使用gitbush来启动demo.sh文件时,总是失败,也没有service/apollo-service.log日志文件,这样很难排查问题。验证处理如下:
1. 在安装的gitbush目标下,打开gitbush的 git-bash.exe文件来启动。我服务器目录是:E:\GitBush\git-bash.exe。
2. 在Demo.sh文件中除了配置mysql,其它都不要修改。
3. 在环境变量中有另一个java环境,去掉如下:C:\Program Files (x86)\Common Files\Oracle\Java\javapath,增加E:\java\jdk1.8.0_241\bin,在重启打开git-bash.exe文件来启动。 反复测试是这个问题导致
-- 修改部门,
USE apolloportaldb;
SELECT * FROM serverconfig WHERE id=;
UPDATE serverconfig SET `Value`='[{"orgId":"TEST1","orgName":"样例部门1"},{"orgId":"TEST2","orgName":"yla520"}]' WHERE id=
-- 在gitbush中停止服务 再启动
$ /e/apollo-build-scripts-MASTER/demo.sh STOP
$ /e/apollo-build-scripts-MASTER/demo.sh START
4. 最重要一点
由于服务器在阿里云上,启动apollo后通过访问http://localhost:8080/,会发现eureka 下面的instance info是走的内网ip。这样一来非局域网的.net客户端就无法访问到配置文件。
目前的一个解决方法是在服务器操作系统上,添加环境变量,变量值为阿里云公开的ip地址,如下所示:

这样apollo关闭再启动后,再次访问http://localhost:8080/,会发现eureka 下面的instance info是走的公网ip
参考:快速启动
asp.net core系列 76 Apollo 快速安装模式下填坑和ASP.NetCore结合使用的更多相关文章
- (30)ASP.NET Core3.1 集成Apollo快速安装与使用
1.介绍 Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...
- 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)
黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...
- 【目录】asp.net core系列篇
随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...
- asp.net core系列 40 Web 应用MVC 介绍与详细示例
一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...
- asp.net core系列 30 EF管理数据库架构--必备知识 迁移
一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...
- asp.net core系列 39 Web 应用Razor 介绍与详细示例
一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...
- asp.net core系列 36 WebAPI 搭建详细示例
一.概述 HTTP不仅仅用于提供网页.HTTP也是构建公开服务和数据的API强大平台.HTTP简单灵活且无处不在.几乎任何你能想到的平台都有一个HTTP库,因此HTTP服务可以覆盖广泛的客户端,包括浏 ...
- asp.net core 系列 18 web服务器实现
一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...
- WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化
WPF中的常用布局 一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...
随机推荐
- js javascript 获取url,获得当前页面的url,静态html文件js读取url参数
获得当前页面的url window.location.href 静态html文件js读取url参数 location.search; //获取url中"?"符后的字串 下边为转载的 ...
- python基础修改haproxy配置文件
1.通过eval(),可以将字符串转为字典类型. 2.Encode过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数.两个函数的唯一区别就是dump把py ...
- etcd安装部署步骤
我是通过yum直接安装的(yum install etcd -y),其生成的配置文件在/etc/etcd/etcd.conf. 这里分单机版和集群版来介绍配置项 单机配置 ETCD_DATA_DIR: ...
- openCryptoki安装
什么是OpenCryptoki OpenCryptoki提供Linux下的PKCS#11库和工具,支持包括TPM和IBM加密硬件以及软件令牌. 目前(2019/05/06)最新release版为3.1 ...
- [大餐]开发摘记1--我的Fragment通信的框架
[大餐]开发摘记1--我的Fragment通信的框架 | 卖牙膏的芖口钉 盒子 盒子 博客 分类 标签 友链 大专栏 [大餐]开发摘记1--我的Fragment通信的框架ass="ROUN ...
- 对话|人工智能先驱Yoshua Bengio
Bengio"> 今年1月份,微软收购深度学习初创公司Maluuba时,Maluuba公司德高望重的顾问.深度学习先驱Yoshua Bengio也接手了微软的人工智能研究顾问 ...
- 安卓权威编程指南 -笔记(19章 使用SoundPool播放音频)
针对BeatBox应用,可以使用SoundPool这个特别定制的实用工具. SoundPool能加载一批声音资源到内存中,并支持同时播放多个音频文件.因此所以,就算用户兴奋起来,狂按按钮播放全部音频, ...
- 理解 Java 内存模型的因果性约束
目录 理解 Java 内存模型的因果性约束 欢迎讨论 规范理解 例子练习 例子1 例子2 总结 理解 Java 内存模型的因果性约束 欢迎讨论 欢迎加入技术交流群186233599讨论交流,也欢迎关注 ...
- web前端性能优化的技巧
1. 请减少HTTP请求 基本原理: 在浏览器(客户端)和服务器发生通信时,就已经消耗了大量的时间,尤其是在网络情况比较糟糕的时候,这个问题尤其的突出. 一个正常HTTP请求的流程简述:如在浏览器中输 ...
- 俊哥的blog的一道题
题目: 实现一个person对象,有eat和dinner两种方法 请用实例[依次类推] new person('Tom').sleep(10).eat('dinner'); //输出 console. ...