前言:由于公司占时没有运维,出于微服务的需要,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结合使用的更多相关文章

  1. (30)ASP.NET Core3.1 集成Apollo快速安装与使用

    1.介绍 Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...

  2. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

  3. 【目录】asp.net core系列篇

    随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...

  4. asp.net core系列 40 Web 应用MVC 介绍与详细示例

    一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...

  5. asp.net core系列 30 EF管理数据库架构--必备知识 迁移

    一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...

  6. asp.net core系列 39 Web 应用Razor 介绍与详细示例

    一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...

  7. asp.net core系列 36 WebAPI 搭建详细示例

    一.概述 HTTP不仅仅用于提供网页.HTTP也是构建公开服务和数据的API强大平台.HTTP简单灵活且无处不在.几乎任何你能想到的平台都有一个HTTP库,因此HTTP服务可以覆盖广泛的客户端,包括浏 ...

  8. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  9. WPF中的常用布局 栈的实现 一个关于素数的神奇性质 C# defualt关键字默认值用法 接口通俗理解 C# Json序列化和反序列化 ASP.NET CORE系列【五】webapi整理以及RESTful风格化

    WPF中的常用布局   一 写在开头1.1 写在开头微软是一家伟大的公司.评价一门技术的好坏得看具体的需求,没有哪门技术是面面俱到地好,应该抛弃对微软和微软的技术的偏见. 1.2 本文内容本文主要内容 ...

随机推荐

  1. js编写trim()函数

    1.js中本身是没有trim函数的,不过你可以自己写一个 function trim(str) {     var newStr = str.replace(/^\s*$/g,'')     retr ...

  2. Center Loss - A Discriminative Feature Learning Approach for Deep Face Recognition

    URL:http://ydwen.github.io/papers/WenECCV16.pdf这篇论文主要的贡献就是提出了Center Loss的损失函数,利用Softmax Loss和Center ...

  3. Logback 标准xml参考

    强制: [强制]应用中不可直接使用日志系统(Log4j.Logback)中的 API,而应依赖使用日志框架SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一.imp ...

  4. mongodb写入安全级别

    MongoDB的写安全机制 写入安全(Write Concern)是一种由客户端设置的,用于控制写入安全级别的机制,通过使用写入安全机制可以提高数据的可靠性. MongoDB提供四种写入级别,分别是: ...

  5. js中的函数应用

    js中的函数应用 什么是函数,函数的概念 函数就像一个黑匣子,里面的东西你都不知道,但是你提供一些材料放进去,他可以制造出你需要的东西; 可以让多个一样的功能封装组合起来,然后想执行几次就执行几次 函 ...

  6. Node REPL环境

    1.概述 REPL全称Read,Eval,Print,Loop,简单理解为接收用户输入,执行用户输入,打印执行结果并输出到控制台,进行下一次轮回,可以进行一些简单的测试,类似于浏览器的控制台. 命令行 ...

  7. Manjaro 19.01 kde下Tim sogou软件安装问题及解决

    我的系统配置 首先第一个问题是,在manjaro下Tim Thunderspeed这种deepin-wine的软件.今天我在装这些软件的时候,安装之后不能打开,闪退.苦恼了我好一会儿.终于找到了解决的 ...

  8. 菜鸟系列Golang学习 — 切片

    切片简介 切片也是一种数据类型,在Golang中,切片底层基于数组实现的. 我们定义切片如下 var slice []int 切片之所以出现,是为了更好的利用资源,管理数据,如果使用数组,则我们一开始 ...

  9. D3.js实现拓扑图

    最近写项目需要画出应用程序调用链的网路拓扑图,完全自己写需要花费些时间,那么首先想到的是echarts,但echarts的自定义写法写起来非常麻烦,而且它的文档都是基于配置说明的,对于自定义开发不太方 ...

  10. 学h5前端开发前必知的三大流行趋势

    学h5前端开发前必知的三大流行趋势 随着互联网时代的飞速发展,各种互联网的Web应用程序层出不穷,很多人对于HTML5前端开发的过程充满了好奇,但是却没有了解到前端开发的未来发展趋势.下面,云慧学院专 ...