asp.net core系列 76 Apollo 快速安装模式下填坑和ASP.NetCore结合使用
前言:由于公司占时没有运维,出于微服务的需要,apollo只能先装在windows 阿里云上跑起来,由于环境及网络等问题,在安装过程中遇到很多坑,算是一个个坑填完后,最终实现。
一. java jdk环境
java jdk 1.8下载地址:
建议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下载地址: 有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=123456 # apollo portal db info apollo_portal_db_url=jdbc:mysql://localhost:3306/apolloportaldb?characterencoding=utf8 apollo_portal_db_username=root apollo_portal_db_password=123456
四. quick-start 启动apollo配置中心
下载git bash, 需要bash环境,下载地址: , 安装后默认路径在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文件。
启动成功后访问 输入用户名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.0 install-package com.ctrip.framework.apollo.configuration -version 2.0.3
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=2; update serverconfig set `value`='[{"orgid":"test1","orgname":"样例部门1"},{"orgid":"test2","orgname":"yla520"}]' where id=2 -- 在gitbush中停止服务 再启动 $ /e/apollo-build-scripts-master/demo.sh stop $ /e/apollo-build-scripts-master/demo.sh start
4. 最重要一点
由于服务器在阿里云上,启动apollo后通过访问,会发现eureka 下面的instance info是走的内网ip。这样一来非局域网的.net客户端就无法访问到配置文件。
目前的一个解决方法是在服务器操作系统上,添加环境变量,变量值为阿里云公开的ip地址,如下所示:
这样apollo关闭再启动后,再次访问,会发现eureka 下面的instance info是走的公网ip
参考:快速启动
上一篇: Java多线程-入门知识
下一篇: 嘿,你对象在这儿—— 面向对象:类和对象