zoukankan      html  css  js  c++  java
  • 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=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:UsersAdministrator下,在bush中使用ls查看文件

          将apollo-build-scripts-master目录移到C:UsersAdministrator下

       启动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:optdata{appId}config-cache,所以请确保C:optdata目录存在,且应用有读写权限

        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:GitBushgit-bash.exe。

       2. 在Demo.sh文件中除了配置mysql,其它都不要修改。

       3. 在环境变量中有另一个java环境,去掉如下:C:Program Files (x86)Common FilesOracleJavajavapath,增加E:javajdk1.8.0_241in,在重启打开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

      

       参考:快速启动

  • 相关阅读:
    C++_重载、重写和重定义的区别
    C++静态库与动态库
    C++ 中重载运算符 “<” 及 friend属性
    C++中,关于#include<***.h>和#include"***.h"的区别
    static_cast, dynamic_cast, const_cast讨论
    浅析C++中static关键字
    C语言包含头文件时用引号和尖括号的区别
    vc实现透明位图,透明背景
    VS2008调试技巧——断点失效
    Spring解决循环依赖的理解
  • 原文地址:https://www.cnblogs.com/MrHSR/p/12538458.html
Copyright © 2011-2022 走看看