2021-06-11 13:42:06 版本 : .net core 中使用携程apollo远程配置中心
作者: 郑伟 于 2021年06月11日 发布在分类 / 人防组 / 人防后端 下,并于 2021年06月11日 编辑
 历史版本

修改日期 修改人 备注
2021-06-11 15:29:28[当前版本] 郑伟 其他原因...
2021-06-11 13:42:06 郑伟 格式调整
2021-06-11 11:56:15 郑伟 格式调整
2021-06-11 11:54:18 郑伟 创建版本

阿波罗远程配置中心

1 基础配置

1-1mysql配置

docker run -d -p 3306:3306 --name mysql --restart always   \
-v /data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=Renfang@123# \
-e MYSQL_ROOT_HOST=% \
-e TZ=Asia/Shanghai \
mysql  \
--lower_case_table_names=1 

# 进入mysql的docker容器内部
docker exec -it mysql bash

# 以root身份进入mysql
mysql -u root -p

#输入root用户密码

#添加root远程登录,并设置远程登录密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Renfang@123#';

#刷新权限
FLUSH PRIVILEGES;


1-2 mysql脚本导入

下载 sql脚本 后,将其中 apolloconfigdb.sql apolloportaldb.sql 导入mysql创建Apollo相关的数据库

1-3 修改mysql中的配置

  • apolloconfigdb 中的 serverconfig 里面的 eureka.service.url 字段值改为当前部署的地址

    • http://apollo-configservice:8080/eureka/,http://apollo-adminservice:8090/eureka/

  • apolloportaldb 中的 serverconfig 里面的 apollo.portal.envs 字段值改为当前需要部署的环境,示例中使用 dev

2 apollo配置

2-1 镜像下载

# 下载apollo相关镜像
docker pull apolloconfig/apollo-configservice
docker pull apolloconfig/apollo-adminservice
docker pull apolloconfig/apollo-portal


2-2 服务部署

!!!注意修改以下数据库的IP地址!!!

# 创建服务

docker service create --name apollo-configservice --publish 8080:8080 \
	--network cssz \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.199.120:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=Renfang@123# \
    -e SPRING_CLOUD_INETUTILS_IGNORED_INTERFACES[0]=docker0 \
    -e SPRING_CLOUD_INETUTILS_IGNORED_INTERFACES[1]=veth.* \
    -e EUREKA_INSTANCE_IP_ADDRESS=apollo-configservice \
    apolloconfig/apollo-configservice

docker service create --name apollo-adminservice --publish 8090:8090 \
	--network cssz \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.199.120:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=Renfang@123# \
    -e SPRING_CLOUD_INETUTILS_IGNORED_INTERFACES[0]=docker0 \
    -e SPRING_CLOUD_INETUTILS_IGNORED_INTERFACES[1]=veth.* \
    -e EUREKA_INSTANCE_IP_ADDRESS=apollo-adminservice \
	apolloconfig/apollo-adminservice

docker service create --name apollo-portal --publish 8070:8070 \
	--network cssz \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.199.120:3306/ApolloPortalDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=Renfang@123# \
    -e APOLLO_PORTAL_ENVS=dev\
    -e DEV_META=http://apollo-configservice:8080 \
    apolloconfig/apollo-portal


2-3 日志查看

# 查看日志
docker service logs  apollo-configservice
docker service logs  apollo-adminservice
docker service logs  apollo-portal

# 删除apollo
docker service rm apollo-configservice
docker service rm apollo-adminservice
docker service rm apollo-portal


3 .net core 程序中使用apollo

1、安装nuget包 Com.Ctrip.Framework.Apollo.Configuration


2、修改 Program.cs 文件

using System;
using System.IO;
using Com.Ctrip.Framework.Apollo;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args)
        {
            //此处使用多环境切换appsettings.json,便于开发、测试、生产环境切换使用不同的apollo地址
            var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
            var configBuilder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true);
            if (!string.IsNullOrWhiteSpace(environmentName))
            {
                configBuilder = configBuilder.AddJsonFile($"appsettings.{environmentName}.json", optional: true);
            }

            var config = configBuilder.AddApollo(configBuilder.Build().GetSection("apollo"))
                        .AddDefault()
                		//针对各子系统,使用各自私有的命名空间,如果添加的类型为json文件,需要指定
                        .AddNamespace("muster", Com.Ctrip.Framework.Apollo.Enums.ConfigFileFormat.Json)
                        .Build();
            return WebHost.CreateDefaultBuilder(args)
                .UseKestrel()
                .UseUrls(config["server.urls"].Split(';'))
                .UseConfiguration(config)
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseStartup<Startup>();

        }

    }


3、修改 appsettings.json 文件

{
  "apollo": {
    "AppId": "cssz",
    "MetaServer": "http://apollo-configservice:8080"
      
    //本地开发时,如果apollo部署在docker集群中,需要指定ConfigServer
    //以下地址为nginx反向代理地址,代理到docker集群中apollo相关服务端口
    "ConfigServer": [
      "http://192.168.199.8:8080"
    ]
  },
//配置文件中仍保留redis相关配置,是因为redis辅助类在程序运行时,
//直接读取的appsettings.json文件中的配置,未使用注入方式注入IConfiguration类
  "RedisHost": "192.168.199.10:6379",
  "RedisPassWord": "root",
  "RedisDefaultKey": "Muster"
}



4 apollo线上文件修改,添加 namespace


参考链接

Apollo 分布式部署指南 网络策略 

.NET Core微服务之基于Apollo实现统一配置中心



 附件

附件类型

JPGJPG PNGPNG

历史版本-目录  [回到顶端]
    知识分享平台 -V 4.8.7 -wcp