• Apollo在NetCore实践


    Apollo解析

    参考文章
    在这里插入图片描述

    Apollo Config Service:提供配置的读取、推送等功能,服务对象是 Apollo 客户端。

    Apollo Admin Service:提供配置的修改、发布等功能,服务对象是Apollo Portal。

    Apollo Portal:Apollo 的管理界面,进行不同项目的配置(项目配置、权限配置等),服务对象是开发者和开放平台API。

    一、Apollo搭建

    MingW安装

    MingW安装文章

    首先重要一点,要在windows下运行启动脚本demo.sh的前提是安装"MingW"不能用“CygWin”。因为在CygWin里运行java会报找不到jar文件的问题。

    1.下载Apollo

    https://github.com/nobodyiam/apollo-build-scripts
    
    • 1

    在这里插入图片描述

    2.执行sql脚本

    运行sql目录中的两个sql脚本,如果原来有库注意备份。

    3.编辑demo.sh

    设置两个数据库的账号和密码,以及数据库地址

    在这里插入图片描述

    4.运行demo.sh

    使用git指令开启apollo

    ./demo.sh start
    
    • 1

    使用git指令关闭apollo

    ./demo.sh stop
    
    • 1

    5.提示成功,访问网址

    http://localhost:8070
    
    • 1

    出现登录页面即为成功

    二、Apollo功能解析

    参考这篇文章

    1.创建项目

    在这里插入图片描述

    部门:选择应用所在的部门。部门数据来自 ApolloPortalDB 库的 ServerConfig 表的 Key = organizations 对应的记录。
    应用 AppId:用来标识应用身份的唯一 id,格式为 string,需要和客户端 app.properties 中配置的 app.id 对应。
    应用名称:应用名,仅用于界面展示。
    应用负责人:默认具有项目管理员权限。
    项目管理员:可以创建 Namespace 和集群、分配用户权限。

    2.添加Namesapce

    在这里插入图片描述

    public:
    公共的Namespace的配置能被任何项目读取
    通过创建公共Namespace可以实现公共组件的配置,或多个应用共享同一份配置的需求如果其它应用需要覆盖公共部分的配置,可以在其它应用那里关联公共Namespace,然后在关联的Namespace里面配置需要覆盖的配置即可如果其它应用不需要覆盖公共部分的配置,那么就不需要在其它应用那里关联公共Namespace

    private:
    私有Namespace的配置只能被所属的应用获取到
    通过创建一个私有的Namespace可以实现分组管理配置私有Namespace的格式可以是xml、yml、yaml、json、txt.

    3.关联Namespace

    已经存在的公共命名空间

    在这里插入图片描述

    再次创建一个应用,添加Namespace,选择关联公共,然后选择已有的公共Namespace

    在这里插入图片描述

    提交后,也可以配置覆盖选项

    在这里插入图片描述

    当我们读取Name,查看输入值

    在这里插入图片描述

    4.添加配置信息

    Namespace中添加Key/Value配置项(可以通过文本形式添加,速度更快),添加之后记得点击发布

    在这里插入图片描述

    5.存储其他格式数据

    在这里插入图片描述

    6.灰度发布

    1.添加灰度版本,会出现下面的界面

    在这里插入图片描述

    2.然后添加灰度规则,上面图片,已经添加了一条

    在这里插入图片描述

    添加一条配置信息
    在这里插入图片描述

    3.测试两个用例
    配置项

    在这里插入图片描述
    在这里插入图片描述

    现在是读取得灰度版本得配置信息,将灰度规则信息得AppId更改为MASD而配置文件不变,再次测试

    在这里插入图片描述

    这里是主版本得配置信息

    现在点击全量发布
    然后再次测试

    在这里插入图片描述

    现在发布到所有了,即使不满足灰度规则,也能访问

    点击放弃灰度,然后就回到只有主版本界面

    在这里插入图片描述

    7.Apollo多环境配置

    三、netcore配置

    nuget包安装

    Install-Package Com.Ctrip.Framework.Apollo.Configuration 
    
    • 1

    1.配置program

     public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder
                        .ConfigureAppConfiguration((hostingContext, builder) =>
                        {
                            builder
                                .AddApollo(builder.Build().GetSection("apollo"))
                                .AddDefault()
                                .AddNamespace("TEST2.Shared");
                        })
                        .UseStartup<Startup>();
                    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.配置文件appsetting.json

    {
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*",
      "apollo": {
        "AppId": "MSAD", //AppId
        "MetaServer": "http://192.168.136.129:8080", // Eureka地址
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.获取配置信息

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Logging;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace Apollo.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class WeatherForecastController : ControllerBase
        {
            private readonly IConfiguration _configuration;
    
            public WeatherForecastController( IConfiguration configuration)
            {
                _configuration = configuration;
            }
    
            [HttpGet]
            public ActionResult<IEnumerable<string>> Get()
            {
                var appName = _configuration["liutongyang"];
                return new string[] { "value1", "value2", appName };
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

  • 相关阅读:
    GoogleNet论文精读
    新手如何练习SQL?|掌握
    SpringCloud集成链路追踪Sleuth+Zipkin
    面试代码题合集
    Spring Security 集成 OAuth 2.0 认证(一)
    蔟/块/页/扇区
    先验概率 / 后验概率 / 条件概率 / 全概率公式 / 贝叶斯公式
    Windows平台Fortran编程入门
    django和celery的项目,nginx和uwsgi协议,在通过api端口进行deeplearning任务的训练和排队
    JAVA医药进销存管理系统(附源码+调试)
  • 原文地址:https://blog.csdn.net/wsnbbdbbdbbdbb/article/details/126478898