2021-06-11 11:54:18 版本 : .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"     ]  },   "RedisHost": "192.168.199.10:6379",   "RedisPassWord": "root",   "RedisDefaultKey": "Muster" } //配置文件中仍保留redis相关配置,是因为redis辅助类在程序运行时,直接读取的appsettings.json文件中的配置,未使用注入方式注入IConfiguration类

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


参考链接

Apollo 分布式部署指南 网络策略 .NET Core微服务之基于Apollo实现统一配置中心


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