欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-09-20 12:46:34
前言:由于公司占时没有运维,出于微服务的需要,Apollo只能先装在windows 阿里云上跑起来,由于环境及网络等问题,在安装过程中遇到很多坑,算是一个个坑填完后,最终实现。 一. java jdk环境 java jdk 1.8下载地址: https://www.oracle.com/java/t ......

前言:由于公司占时没有运维,出于微服务的需要,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时选择目录如下:

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

       安装后,配置环境变量,查看版本信息:

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

二.mysql 环境

  2.1 安装mysql 5.7及以上

  2.2 创建apolloportaldb 数据库

    sql文件在apollo-build-scripts-master包中,该包下载看第三节。

    导入命令如下所示:

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

    导入成功后,可以通过执行以下sql语句来验证

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

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

  2.3 创建apolloconfigdb数据库

     导入命令如下所示:

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

 

     导入成功后,可以通过执行以下sql语句来验证:

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

   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查看文件

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

      将apollo-build-scripts-master目录移到c:\users\administrator下

   启动apolloquick start脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。启动功能如下所示:

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

   如果启动失败,查看service/apollo-service.log 或 portal/apollo-portal.log日志进一步分析, 操作系统重启后,需要再打开git bush手动启用demo.sh文件。

   启动成功后访问 输入用户名apollo,密码admin后登录

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

     配置二个app项目如下所示:

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

 

 

 五.  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. 添加的项目如下所示:

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

   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};
        }

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

   .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地址,如下所示:

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

 

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

  

   参考:快速启动