前言:由于公司占时没有运维,出于微服务的需要,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. Java中间件之RMI及实例介绍 · zijian's blog

    RMI介绍   远程方法调用(Remote Method Invocation)是Sun公司规定的允许在不同的JAVA虚拟机之间进行对象间通信的一种规范.在RMI中,JVM可以位于一个或多个计算机上, ...

  2. Hi3518_SDK

    第一章 Hi3518_SDK_Vx.x.x.x版本升级操作说明 如果您是首次安装本SDK,请直接参看第2章. 第二章 首次安装SDK 1.Hi3518 SDK包位置 在"Hi3518_V10 ...

  3. 未来京东真能成为中国第一大B2C电商平台吗?

    ​     2月10日,京东集团在北京举行2017年"科技引领未来"开年年会.在本届年会上,京东宣布全面向技术转型.京东集团CEO刘强东正式对外公布未来12年的战略:在以人工智能为 ...

  4. Leetcode 24题 两两交换链表中的节点(Swap Nodes in Pairs))Java语言求解

    题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4,你应该返回 ...

  5. Haproxy 使用block 阻止域名访问到某个子目录报403

    配置教程如下: acl is_https_com hdr_beg(host) www.baidu.com #定义规则域名 acl api_block_url_web url_dir -i /web/ ...

  6. Python神经网络编程笔记

    神经元 想一想便知道,当一个人捏你一下以至于你会痛得叫起来的力度便是神经元的阈值,而我们构建的时候也是把这种现象抽象成一个函数,叫作激活函数. 而这里便是我们使用sigmoid函数的原因,它是一个很简 ...

  7. 蚂蚁金服开源 | 可视化图形语法G2 3.3 琢磨

    G2 是蚂蚁金服数据可视化解决方案 AntV 的一个子产品,是一套数据驱动的.高交互的可视化图形语法. 经过两个多月密锣紧鼓的开发,400+次提交,G2 3.3版本今天终于和大家见面了.自上次3.2版 ...

  8. 纯JS实现KeyboardNav(学习笔记)一

    纯JS实现KeyboardNav(学习笔记)一 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 GitHub项目源码 预览地址 最终效果 KeyboardNav使用指南 ...

  9. Java中文件上传路径与路径修改相关问题(tomcat8.0+eclipse)

    1.普通文件上传的路径: 通过getRealPath获取相关路径 String photoFolder =request.getServletContext().getRealPath("u ...

  10. vue项目开发,用webpack配置解决跨域问题

    今天在本地开发时候碰到了跨域的问题,突然觉着跨域问题在所难免啊,之前没有没有碰到总觉着解决跨域很高大上的样纸,其实就是受限于网络的同源策略,跨域前后端都可以进行处理. 1,后端更改header hea ...