美文网首页
Apollo公共配置与集群

Apollo公共配置与集群

作者: 烂融小菜花 | 来源:发表于2019-10-08 15:36 被阅读0次

    以我们目前的项目来做考量,每个项目存在很多相同的配置,如:数据库连接、mongoDB连接、MQ连接等。

    在接入Apollo后,我们应如何配置这些相同的配置项,以达到最少的配置实现最好的效果?

    每个开发人员本地开发环境都不一样(假设本地装有数据库、mongoDB、MQ),又应该怎样进行自己的配置而不影响其他人?

    下面来讲讲Apollo的公共配置和集群,这两个东西可以解决我们的问题。

    一、公共配置

    为了方便管理公共配置,我登录Apollo管理界面,新建了一个common项目。

    1.创建新的Namespace

    创建Namespace需要项目管理员权限,如果发现没有添加Namespace按钮,可以找项目管理员授权。

    • 点击页面左侧的添加Namespace

      进入common项目后,点击页面左下角的添加Namespace。

    • 点击“创建新的Namespace”

      输入公共组件的Namespace名称,需要注意的是Namespace名称全局唯一

      Apollo会默认把部门代号添加在最前面

    Apollo-namespace1.png
    • 点击提交后,页面会自动跳转到关联Namespace页面

      首先,选中所有需要有这个Namespace的环境和集群,一般建议全选

      其次,选中刚刚创建的namespace

      最后,点击提交

    Apollo-namespace2.png
    • 关联成功后,页面会自动跳转到Namespace权限管理页面

      分配修改权限

      分配发布权限

      修改完成后,返回项目首页。

    2.添加公共配置项,并发布

    在公共的Namespace下添加的是各应用项目统一的配置项。采用文本方式更加简单快速。

    Apollo-namespace3.png

    3.应用关联以及覆盖公共配置

    • 关联公共组件Namespace

      进入使用公共组件的应用项目首页,我们这里以cas单点登录项目为例,也就是进入cas项目的首页,点击左侧的添加Namespace按钮,进入关联公共Namespace页面进行关联公共配置。关联成功后返回项目首页。

    Apollo-namespace4.png

    关联成功后,会在原来的默认application配置下面多出公共配置。

    Apollo-namespace5.png
    • 覆盖公共配置

      覆盖公共配置有两种方式:

      方式一:点击公共配置项右边的”覆盖此配置“的按钮,进行配置更改覆盖

      方式二:直接在私有配置(application)下进行配置同名的配置项,同名的私有配置会比公共配置优先级高

    4.更改应用项目使用的Namespace

    apollo.bootstrap.namespaces=application,rscenter.common
    

    5.测试

    @RestController
    @RequestMapping("test")
    public class TestController {
        @Value("${testname:}")
        private String testName;
    
        @GetMapping("testApollo")
        public String testApollo() {
            return "hello: " + testName;
        }
    }
    

    启动项目后访问,即可获取到公共配置中testname的值

    二、集群

    在有些特殊情况下,应用有需求对不同的集群做不同的配置,比如部署在A机房的应用连接的es服务器地址和部署在B机房的应用连接的es服务器地址不一样。

    在这种情况下,可以通过在Apollo创建不同的集群来解决。

    当然我们也可以用Apollo的集群来解决我们各开发人员在自己本地开发时,需要配置不同的配置的问题。而这些不同的配置大致都是些公共配置,如:数据库连接、MongoDB连接、MQ连接等。所以我们一般只需要进行公共配置集群就可以了。

    1. 创建集群

    创建集群需要项目管理员权限,如果发现没有添加集群按钮,可以找项目管理员授权。我这里只进行公共配置的集群。所以直接进入common项目首页进行操作。

    • 点击页面左侧的“添加集群”按钮

    • 输入集群名称,选择环境并提交

      Apollo默认会读取机器上/opt/settings/server.properties(linux)C:\opt\settings\server.properties(windows)文件中的idc属性作为集群名字,

      在这里创建的集群名字需要和机器上server.properties中idc属性一致

      集群的名称最好以约定好的格式来命名,我们目前只为了解决开发人员本地不用的配置问题,可以约定以人名来命名,如:caishihua

    • 切换到对应的集群,修改配置并发布

    Apollo-cluster.png

    2.更改应用项目所需要的集群

    Apollo支持多种集群配置方式,这里只选择了server.properties的配置方式进行讲解。其他方式请看后面

    • 更改server.properties的idc配置

      /opt/settings/server.properties(linux)C:\opt\settings\server.properties(windows)文件中的idc属性配置为集群名字

    env=DEV
    #apollo.meta=http://192.168.10.126:8080
    idc=caishihua
    

    访问cas的测试接口进行验证:

    注意Apollo中cas项目的testname公共配置不能被覆盖,否则不会读取到common公共配置的caishihua集群配置。或者需要在cas项目中新建集群。

    Apollo-cluster-result.png

    三、集群的所有配置方式

    Apollo支持以下方式集群,按照优先级从高到低分别为:

    1. 通过Java System Property
    apollo.cluster
    

    可以通过Java的System Property apollo.cluster来指定

    在Java程序启动脚本中,可以指定

    -Dapollo.cluster=SomeCluster
    

    如果是运行jar文件,需要注意格式是java -Dapollo.cluster=SomeCluster -jar xxx.jar

    也可以通过程序指定,如System.setProperty("apollo.cluster", "SomeCluster");

    2. 通过Spring Boot的配置文件

    可以在Spring Boot的application.propertiesbootstrap.properties中指定apollo.cluster=SomeCluster

    3. 通过Java System Property

    可以通过Java的System Property idc来指定环境

    在Java程序启动脚本中,可以指定

    -Didc=xxx
    

    如果是运行jar文件,需要注意格式是java -Didc=xxx -jar xxx.jar
    注意key为全小写

    4. 通过操作系统的System Environment

    还可以通过操作系统的System Environment IDC来指定
    注意key为全大写

    5. 通过server.properties 配置文件

    可以在server.properties配置文件中指定idc=xxx
    对于Mac/Linux,文件位置为/opt/settings/server.properties
    对于Windows,文件位置为C:\opt\settings\server.properties

    四、Cluster Precedence(集群顺序)

    1. 如果apollo.clusteridc同时指定:
      • 我们会首先尝试从apollo.cluster指定的集群加载配置

      • 如果没找到任何配置,会尝试从idc指定的集群加载配置

      • 如果还是没找到,会从默认的集群(default)加载

    2. 如果只指定了apollo.cluster
      • 我们会首先尝试从apollo.cluster指定的集群加载配置

      • 如果没找到,会从默认的集群(default)加载

    3. 如果只指定了idc
      • 我们会首先尝试从idc指定的集群加载配置

      • 如果没找到,会从默认的集群(default)加载

    4. 如果apollo.clusteridc都没有指定:
      • 我们会从默认的集群(default)加载配置

    相关文章

      网友评论

          本文标题:Apollo公共配置与集群

          本文链接:https://www.haomeiwen.com/subject/elpwpctx.html