Apollo公共配置与集群

以我们目前的项目来做考量,每个项目存在很多相同的配置,如:数据库连接、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)加载配置
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355