asp.net core系列 76 Apollo 快速安装模式下填坑和ASP.NetCore结合使用

C#

浏览数:35

2020-6-13

AD:资源代下载服务

前言:由于公司占时没有运维,出于微服务的需要,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=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环境,下载地址: 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.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后通过访问http://localhost:8080/,会发现eureka 下面的instance info是走的内网ip。这样一来非局域网的.net客户端就无法访问到配置文件。

    目前的一个解决方法是在服务器操作系统上,添加环境变量,变量值为阿里云公开的ip地址,如下所示:

     这样apollo关闭再启动后,再次访问http://localhost:8080/,会发现eureka 下面的instance info是走的公网ip

  

   参考:快速启动