学习Apollo服务配置中心,与SpringBoot整合
通过spring-boot搭建的业务系统,可以通过Apollo提供远程的配置服务,以达到集群环境统一使用一套动态配置的目的。
1.关于NameSpace
https://github.com/ctripcorp/apollo/wiki/Apollo%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E4%B9%8B%E2%80%9CNamespace%E2%80%9D
1.1 namespace的使用场景
提供一份全公司默认的配置且可动态调整
RPC客户端项目可以自定义某些配置项且可动态调整
1.2 apollo的注解在java中配置
@EnableApolloConfig要和@Configuration一起使用。
想把日志配置也放阿波罗里,那么要把阿波罗的加载顺序提前,但是如此一来,阿波罗的启动就没日志了。
2. 注解
- 1.@ApolloConfig 自动注入Apollo对象
- 2.@ApolloConfigChangeListener 自动注册ConfigChangeListener事件
- 3.@ApolloJsonValue 转换配置的json字符串
3. 使用实践
3.1 单元测试
- 1.单元测试的时候用的是mockdata+{namespace}.properties
- 2.引用mockServer包进行环境模拟
3.2 实际连接Apollo环境
- 1.实际使用要连接Apollo的ConfigService,AdminService以及Portal
- 2.通过客户端API连接时:
- (1)在文件src/main/resources/META-INF/app.properties配置app.id=应用系统标识
例如: app.id=sales-platform
- (2)在文件src/main/resources/META-INF/app.properties配置env=dev、fat、uat、pro等标识
例如: env=dev
- (3)在文件src/main/resources/META-INF/apollo-env.properties配置
例如: dev.meta=http://apollo.dev.xxx.com fat.meta=http://apollo.fat.xxx.com uat.meta=http://apollo.uat.xxx.com pro.meta=http://apollo.xxx.com
- (4)配置apollo.meta=http://config-service-url (这个地方还可以配置好之后,封装一个jar包,使用的时候引用即可)
-
(5)启动Apollo服务,需要mysql以及三个服务。
d:/baiduYun/Program_Files/mysql-advanced-5.6.25-winx64/startMySql.bat sh /c/Users/tf/app/apollo-configservice-1.2.0-github/scripts/startup.sh sh /c/Users/tf/app/apollo-adminservice-1.2.0-github/scripts/startup.sh sh /c/Users/tf/app/apollo-portal-1.2.0-github/scripts/startup.sh
4. 与Eureka和zookeeper的联系区别
能无缝的与SpringCloud、SpringBoot整合,Eureka还支持在我们应用中启动,降低了部署复杂度。
Zk不易与docker集成。
交互API通过Apollo客户端,配置用管理端。
ConfigService和AdminService都需要注册到Eureka上来保持心跳。
在Eureka之上架设了一层MetaServer用来管理元数据?不是,用来封装Eureka的服务发现接口,就是又套了一层。
Client通过MetaServer获得ConfigService服务配置。Portal通过MetaServer获得AdminService服务配置。
Config、Admin、Eureka同时部署在一个JVM中。
Eureka两大职能,Registry与Discovery。
5.存在疑惑
- (1)SpringBoot引用Apollo客户端,不是每次发布都能有效,偶尔也需要重启,这个是为什么?
- (2)apollo-env.properties好像没什么用但又有用,app.properties的env=dev确实没用,但是要怎么配置运行环境,这个待成功验证。
- (3)namespace暂时不支持与SpringBoot整合,这个要怎么结合?
- (4)cluster的概念还有些模糊,而且还没配置,陆续还需要迭代一两个版本加深理解。
6.题外话
提一句CAP理论,Consistency一致性、Availability可用性、Partition-tolerance分区可容忍性。BASE理论Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE是对CAP中一致性和可用性权衡的结果。
写实时性要求高与读实时性要求不高的场景,所以允许最终一致性。
最终一致性是弱一致性的一个特例,是大型分布式系统推崇的一种模型。
分布式网络中的各种问题,成功、失败、超时三态。超时的原因有可能是节点故障,也有可能是网络原因。
由于这些不确定,所以,引进分布式事务概念。从单机ACID概念,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),变为两段式提交,两阶段提交属于牺牲了一部分可用性来换取一致性。
题外话
侧重 | 说明 |
---|---|
CA | 放弃分区容错性,加强一致性和可用性,其实就是传统的单机数据库的选择 |
AP | 放弃强一致性,追求分区容错性和可用性,这是很多分布式系统设计时的选择,例如很多NoSQL系统就是如此 |
CP | 基本不会选择,放弃可用性,追求一致性和分区容错性,网络问题会直接让整个系统不可用 |
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***9nNspULGDPue4wcMXy/tkakZxUrG2vISEkny5Xa6TGa0Hh49decM+k4stOyOHPsNGZuWBA9P5cAw9tz57wR8PP2198wcvAwjpo4nsvPOB1NCF7/4ss9rgkhuPaCC7DrOi98+JG5GzOmWH+79DsKK6u59JTTGJaTBUBFdTXD8gfz7O138O5jj3HXpZewZstmLrr***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***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***m4QCAo9hek2Q3GQYkmL4b7han/cXlDC1QMqvqBIF3bdTsgZUkmnvaB6Zg8IkfS6Mnkqes8GEXv77S+WZWFZagVBushz56kdffaCShPvAYGgwFPA9vrt6Tale+IxbvntH3qfRBCQW1TEJVf9mHg80XO7dmiaxi++dwnOUC53zb2VaLRlgAxW9AUpJcO8w9JtRsajhKsXPKYHr+mlvqU+3aZ0RVoseWUJ0mrbTLU50oyma9jtreV5BIw8ZByarkEfhQsh3LxuE978JlUqOA0EnAEchiPdZmQ8Srh7QUrJcN/wzKyMajN5+u2nU3821tVx/snnUTp5Irf+eWaqxLGmabREs3Cz2yxEIin0FKqE0z6gHqm9IERyCVBGFnETAo/P0/br9SAE6DYdj8+bet3lcbUd01r+uKU5SsXWCuKJPnphJONehmliJRJYUqZ24OloU7LztUSjbPvXdoTWscqp3WHSEm3BaN3hp3NZ5+ZIMy3RFnSbDSFItZXd7OyatMegtno3VV9UodtsXTY0kpbEdJjEWmIITWst9Zy5GJpB2BVOtxlDAuVx7QVd6OS789lWvy3dpuwXUkoiDY3c/bs7ef35xSTiCQzT5PQfncHFv/lvDMPoudKxgHcXLmXObQ+y9dPkfZg07VCuveNacvODAKxc+j5Xnn8N0756JKuXf0xTYzP/edHZ/PSqC2hujPDorLk8/8RLNDY0YXc4+NppJ3L+FeeRmx8CKancspWzTrqASdMmI6wEa1asQ0pJMC/MxVdfwsmnn9BmjoCFf3+Nv/zxIXbu+BKkxOF2csP9NzP1qMnJTT2k5IXH/85fZz3GrqoaNE3n2G98latu/RVOZ+ZVupVSUuQtUt5WH1HC1QdG+kfyReMXxK14uk3ZZ+ItMS6b8XM2r9/C9JOOYcLkMSx/833m/fkpNq3bzJ2P397tcVJK3nv9La656DpyQgG++YNvEW1q4o0XFvOrc37NIwv+kqzxLiWJRJx3Fr7NpGmTKSkbyTEnTkdaknUrVvHYfU9RNmks046dyqfrNvHyUy/w9sKlPPzaI+TkuJEkN+tYuewjHG4X3z7rNFqaIix8fhH/d9kN+MMhph6VDgieuf9RZt3yIMG8EDN+MgOH087aj9YybuJoNC05k/rYPQ/zwB8foahkOKeffRw7t25n8fOvk5Bw05+uzbgdgOw2O8W+4swLSWQoSrj6gC50ygJlrNu1bkg+ES3LYv5f57Hpk39x5s/O5dLWWcbzLj+Pmy+/gdfmL+bFZxdw2vdP6XKsaTeYc+sDhArzmfv6w9jtBiCYfuzhzPz17by75EOmH3dYa2tBQUkxs/42CysWT+4OJATlRx7G3c/+icOmT6Y5EkU3bDz0+9nMvfdJNm3YwuHTJqSu588NMeeFBwiH/QhN8L1zv8NFZ/yCvz86n6OOO4xdO3Yy5/aHKJs0nlnz7sGw6UgkNsOWGlJGGht4/P6nmHTkFO5+8g6sRALdZuPe6//AM3NfoOp3vyAc9h3AO983JJLSQKmqBdcP1J3qA0II8j35VDRUUBetS7c5/cZmGLzy1IvYnU5+fMV5SAm6riMtyYW/uZhFLy5h8QuLOH3G17scu2tHJdu27qCwpJhH7nwo9XpDbR0SyfpV6znq+MMBEJrg2FOPQ8bjHeJbNtPk0Gnl1Oyq4eNlH7FmxVqWLXwb6BjnEkIw/aSjKSgMp/LIRo4rQ0pJTVU1mq7x7uJlxGIJZlx4JoZhS+31mIqDScmWDZ/R0BBBWhazb7kvdZ1tW3eCZbF+1QbCJxwxgHd4/wjYA+S51ML+/qCEq49IKRkTHMMHOz5Ityn9RrcJtnxaQcGYMXg9DqJ7ZhmFIJgbIhDys7Oikng8gWF2nK9pqG+gJRpjy4bP+Hzzlg7vaUKjtqY29bdAEgx4sSyJprcJVzwWY/bMWbz0zKs0NUVSotmtrd2kYLT3c***KgEoKC7ofssyoObLGgDWfrCKdStWd3hT6Bp1u2u7HJdOxoTGqCFiP1HC1UeEEHhMD0XeIirqK9JtTr+QUuDxOqmvrsbqNNSNNrcQaWwiUFTUbd6Ww+nAMHSO+eaJ/M+Nl3XpYDa70Wl2sXMHFNx59a28OG8hk486nDPO+Q5Tph/KK0/O5/7bHqIrvXdgpytZxnj3rt0kZapre68vuTj5rJ+fz5k/+Y8uw3u7KzOC81JKin3FOG2qNHN/UekQ/WSUfxSG1vvW9plGLNrC0ScfTW3Vlyxd9F7qdSlh7av/pL6hmfIjylPDrvbkDSsglBdk5fsrcXicuH1uPDke3D43Xr8Xp7P3ZEnTELzy3Bvkl4xg1rN38bVvHo8/mMM7i5bt02eZcPgEhIBXn325yw7YewLzxWUl2O0G6z5agzfH29HmgA/DzIz0FrvNTkmgRHlb+4ASrn6iC52yYFlGr2HsjrN/dg6maWPmZTew6MV/UvVFFS89MZ/br70Trz+Hsy85s9vlQ7G4xXmXnUNNZRW//K9f8daCt9mwZiMr3/2Yv/zhQRY8v7jX60qhEQx6qd6xk3eXLGfFOx9y40+vY9WHn+zT55g4bQpTpk1i2YI3ueHymXz83ko2rN7As39+mrn3PoEQgkBumFPPOJEVb73PTb+8meVvfcDGNRtZvuR97v7fO1j78YZ9uvZAMzowGl2oNYn7ghoq9hMhBHnuPLbXb8+4QL20ZI/b2ReNGsFN913PTb+8hZt+fj2arpGIJwjlh7npgZvx+9vqj1mWRcKyAIkATv3B6dTs2s3Ddz/KdRe3pRLkBP1cePWlSc/HkiTj6R2vH22OceFvL2Lmlb/nyrOuAMAXyOGwrxzKh39/1CGoLqXEsromxUrZ9rmshMWNc2Zyw8+uZ/E/XueN+QuSn1ETHDJ1Cj++/Fxaoi1cPvPXxOMWL/9tAQufey11rsIRRRx32kn7doMHEL/DT64rN91mDFmEVKU++41E0hRrYnnF8nSbkiIei7F0wVLcOT6OOObwHts11Nbz5mtvUl1VQ35xIcecdDROV7vhnhAsW7gUm93BkccfgZWwWl8W7Kr8kpXvraS+roFRY0spm1iGy+UgkbCoq97N6hVrGTG6hOElRV2GP5tWb2DdyvUUFBcyaeokIg0NrFmxjvIjDyXH7yUaifDekg8oGllE2SGjU8dZCYt3Fr6NN+BnyvRyrFZxFgK2btrCJyvXE48nKB0/mrIJZei6lrq2ALZv2cbqD9YQjycYO3k8JWUjMQxbWivcCgRHFB2By3DtvbGiW5Rw7QebqzdnVEZ9MoVAdBur6txOti7/6S4gvycVofN7Kc9HJj2c9uK0572eSulIKZPelUja17l9b8dbloVAdEix6HBOutrTF5vTRbGvmFH+URlhy1BFDRX3g5H+kexs3EnMyoxFzH2t5rC3dj2931t9r73V/hJCINqlSHRu39vxvdqj997597Um2WBh7iYlOSogv7+o4Px+oAudCbkT9t5QoSA5RJwQnqDKBQ0A6g7uB0IIchw5jAmOUbsCKXpFIhkbGovPkTlLjYYySrj2E4GgyFtEsa9YiZeiW6SUFHuLyXfnD8m1rpmIEq4BojRQSsgVSrcZigwk7ApTGihVca0BRAnXACFEMn6hprgV7XEbbsaHxyvRGmCUcA0guqZTnleuypMogGRF0/J89X0YDJRwDTB2m53JeZNVLOMgRwhBeX45dj0zFnRnG0q4BhiBwGP3MD48Pt2mKNLIIeFD8BiedJuRtSjhGgQEglx3LiN8I9RM40GGlJJR/lGEXWEV1xpElHANEgJBib+EfHf+kKskodh48j35FOcUq1DBIKOEaxARQjAuPI6wK6w8ryxHIgk7w4wPjVeidQBQi6wPAFJKNtdsZnv99nSbohgEJMlKpqV+lat1oFDCdYCQUlLRUMGm6k3pNkUxwIwNjaXA3X0NfMXgoITrACKRVDdVs/bLtVj***c5iv1EExqTcifhd/iVaB1glHClgYZoAysrV2ZMORxF/zE1k8kFk3Eb7nSbclCihCsNSCmJJqKsqlxFU6wp3eYo+onbcFOeV45pM1UgPk0o4UojCZlgTeUaqiPVaqgxBJBSEnKFmBCegK6pTS7SiRKuNCOlZGP1RioaKtTTO8Mp8hZRFihTD5kMQAlXBiCRfF77OZ/t/izdpii6QSIZHRjNcO9wJVoZghKuDKI+Ws+G6g3UR+tVB8kApJT47D7GhsbiMdW6w0xCCVcGIUnuRrOjYQef1nxKQnbdY1BxYNCFzujgaArcBSBQw/gMQwlXBiKlpCXRwuaazVQ2Virv6wAipSTfk0+pvxRTN9W9z1CUcGUwEklNpIaNuzYSiUdUJxpEpJQ4DSfjQuPwO/zpNkexF5RwZThSSiwsPq/9nK21W1WliUGixF/CcO9wNE1Tw8IhgBKuIYJE0hRrYlP1JmoiNcr7GgCklASdQcqCZTgNpxKsIYQSriGGRFLVWMXm6s1EE1ElYPuAlBK7zU5ZsIywUxX8G4oo4RqCSCR***5s+pLt9dupba5Vna8PSCnxO/wM8w0j5AwhhFBe1hBFCdcQZk/6RGOskYr6CiobK4lbcSVi7ZBSYtNs5LnzGOYdltw+TqU3DHmUcGURcStOZWMl2+q2EYlFOKj7pgSn6aTYW0yeO0+tLcwylHBlGVJKhBDUNNewo37HQZkHluvKpchbhN/hT90PRXahhCuLkUhiiRjb6rZR2ViZzAVDZFVHllIiSeZg5bvzGe4djk23qaFglqOE6yDBkhbN8WZqmmvY3byb3c27iVvxdJu1z9g0G36Hn4AjgN/hx2FzoAm198vBghKugwwpZSr21RRroq65jtqWWuqa62iMNWbcTJuUyRlUt+kmx5GDz+7DZ/clg+wAkqzyIBV9QwmXAkgKRNyKsyuyi7poHbXRWiLxSHKWsvVnsGbj9syOytYfQzNw2Bzk2HPIsecQdAaxaTYlUIoUSrgUHZDIlDi1JFpojjcTs2LEEjFaEi3EEjFiVuu/rbbX+rIUSSAwdANTNzF1E0Mzkr82A1MzMXQjJVqmbnaxR6HYgxIuxV7Z4xG1RwjRQaykTE4EtFit4paIpUTK0AwM3ejgMQlE101yVX6Voo8o4VIoFEMONQ2jUCiGHP8G1ZWftbUL7JkAAAAASUVORK5CYII=”>
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/197011.html