Apollo框架的使用和簡(jiǎn)單介紹
Apollo(阿波羅)是攜程框架部門(mén)研發(fā)的分布式配置中心晦鞋,能夠集中化管理應(yīng)用不同環(huán)境得糜、不同集群的配置载绿,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端床蜘,并且具備規(guī)范的權(quán)限辙培、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景
github地址:
https://github.com/ctripcorp/apollo
本地快速部署Quick Start邢锯,只適合效果預(yù)演扬蕊,無(wú)法根據(jù)項(xiàng)目需求更改配置,詳細(xì)了解分布式配置
Apollo配置中心介紹
部署安裝請(qǐng)搜索關(guān)鍵字:Apollo分布式配置中心部署以及使用
1. 使用:
git clone https://github.com/ctripcorp/apollo.git
比較重要的幾個(gè)項(xiàng)目:
apollo-configservice:提供配置獲取接口丹擎,提供配置更新推送接口尾抑,接口服務(wù)對(duì)象為Apollo客戶(hù)端
apollo-adminservice:提供配置管理接口,提供配置修改蒂培、發(fā)布等接口再愈,接口服務(wù)對(duì)象為Portal,以及Eureka
apollo-portal:提供Web界面供用戶(hù)管理配置
apollo-client:Apollo提供的客戶(hù)端程序护戳,為應(yīng)用提供配置獲取践磅、實(shí)時(shí)更新等功能
2. 數(shù)據(jù)庫(kù)初始化(!mysql要在5.6以上,定位問(wèn)題在于TimeStamp在5.6以下唯一)
下面的sql為大寫(xiě)格式灸异,注意數(shù)據(jù)庫(kù)的大小寫(xiě)敏感設(shè)置
ApolloPortalDB:執(zhí)行apollo\scripts\sql\apolloportaldb.sql
ApolloConfigDB:DEV FAT UAT PRO 環(huán)境執(zhí)行apollo\scripts\sql\apolloconfigdb.sql
要在apollo-configservice府适,apollo-adminservice,apollo-portal中的application.yml中配置數(shù)據(jù)庫(kù)信息:
# apollo-configservice肺樟,apollo-adminservice
spring:
datasource:
url: jdbc:mysql://localhost:3306/ApolloConfigDBcharacterEncoding=utf8
username:
password:
driver-class-name: com.mysql.jdbc.Driver
# apollo-portal
spring:
datasource:
url: jdbc:mysql://localhost:3306/ApolloPortalDBcharacterEncoding=utf8
username:
password:
driver-class-name: com.mysql.jdbc.Driver
3. 修改環(huán)境調(diào)用地址
# meta server url, different environments should have different meta server addresses
dev_meta=http://localhost:8080
fat_meta=http://192.168.35.208:9100
uat_meta=http://192.168.35.209:9100
pro_meta=http://192.168.35.210:9100
4. 修改數(shù)據(jù)庫(kù)數(shù)據(jù)
在DEV FAT UAT PRO 對(duì)應(yīng)的ApolloConfigDB數(shù)據(jù)庫(kù)中,找到表ServerConfig中的eureka.service.url配置項(xiàng):
UPDATE apolloconfigdb.ServerConfig SET ServerConfig.`Value`='http://localhost:9100/eureka/' WHERE `Key`='eureka.service.url';
現(xiàn)在已經(jīng)可以運(yùn)行項(xiàng)目了,若缺失jar可一一補(bǔ)齊
如需部署在服務(wù)器
可進(jìn)入scripts/下運(yùn)行build.bat或./build.sh
該腳本會(huì)依次打包apollo-configservice, apollo-adminservice, apollo-portal和apollo-client檐春。
由于ApolloConfigDB在每個(gè)環(huán)境都有部署,所以對(duì)不同環(huán)境的config-service和admin-service需要使用不同的數(shù)據(jù)庫(kù)連接信息打不同的包么伯,portal和client只需要打一次包即可
將壓縮包上傳至服務(wù)器解壓
修改scripts/startup.sh :
LOG_DIR=/opt/logs/100003171 //日志路徑
SERVER_PORT=9100 //服務(wù)端口
執(zhí)行scripts/startup.sh即可
如需停止服務(wù)疟暖,執(zhí)行scripts/shutdown.sh.
登錄,默認(rèn)用戶(hù)名密碼為:apollo/admin
5. 踩坑細(xì)節(jié):
core和client要打包成jar放到項(xiàng)目中
先開(kāi)configservice,然后adminservice俐巴,最后portal
configservice和adminservice打包上傳服務(wù)器時(shí)骨望,一個(gè)環(huán)境對(duì)應(yīng)一份
修改configserver表里的eureka,把注冊(cè)中心定向到內(nèi)網(wǎng)中的eureka
UPDATE apolloconfigdb.ServerConfig SET ServerConfig.Value
='http://localhost:9100/eureka/' WHERE Key
='eureka.service.url';
- 在yml配置文件中寫(xiě)上app.id=xxxxxx欣舵,此處為字符串擎鸠,要和apollo配置中心對(duì)應(yīng)項(xiàng)目的appID相同
然后寫(xiě)上apoll.meta=http://localhost:8080 定向到Configserver服務(wù)
- 整合項(xiàng)目時(shí)
6.1. 將core和client的依賴(lài)引入pom,在程序啟動(dòng)類(lèi)上加上注解@EnableApolloConfig缘圈,創(chuàng)建一個(gè)配置類(lèi)加上注解@component劣光,在給靜態(tài)變量賦值的set方法上加上
@value("${xxx}),將變量申明為pubilc糟把,之后可使用 配置類(lèi).靜態(tài)變量直接訪(fǎng)問(wèn),詳細(xì)看例子
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<dependencies>
<!--Apollo相關(guān)-->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.5.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
<version>1.5.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
// @Component注解表明一個(gè)類(lèi)會(huì)作為組件類(lèi)绢涡,并告知Spring要為這個(gè)類(lèi)創(chuàng)建bean。
// @Bean注解告訴Spring這個(gè)方法將會(huì)返回一個(gè)對(duì)象遣疯,這個(gè)對(duì)象要注冊(cè)為Spring應(yīng)用上下文中的bean雄可。通常方法體中包含了最終產(chǎn)生bean實(shí)例的邏輯。
@Component
public class Config {
@Value("${server.port}")
public void setPort(String port) {
Config.port = port;
}
@Value("${spring.application.name:apollo}")
public void setName(String name) {
Config.name = name;
}
public static String port;
public static String name;
}
public class a{
//要使用Config配置類(lèi)的屬性可以采用
System.out.println(Config.port+","+Config.name);
}
6.2 將程序注冊(cè)到內(nèi)網(wǎng)的服務(wù)中心缠犀,添加pom依賴(lài)滞项,如下,在啟動(dòng)類(lèi)上添加@EnableEurekaClient,yml添加eureka的配置
//Eureka相關(guān)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka- server</artifactId>
</dependency>
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8080/Eureka
register-with-eureka: false
fetch-registry: false
部署到服務(wù)器上夭坪,修改各自解壓包下的config/application-github.properties,配置數(shù)據(jù)庫(kù)
執(zhí)行各自解壓包下的scripts/startup.sh運(yùn)行服務(wù)文判,對(duì)應(yīng)的shutdown.sh為關(guān)閉服務(wù)
現(xiàn)在部署情況是虛擬機(jī)部署服務(wù),鏈接服務(wù)器的數(shù)據(jù)庫(kù)室梅,開(kāi)放端口給本機(jī)上web
9.1 過(guò)程中防火墻需要開(kāi)放端口戏仓,三個(gè)需要在同一網(wǎng)段,虛擬機(jī)使用橋接模式
9.2 vi etc/sysconfig/network-scripts/ifcfg-enp0s3 具體路徑要仔細(xì)看
9.3 執(zhí)行服務(wù)指令 ./config/scripts/startup.sh
./admin/scripts/startup.sh
./protal/scripts/startup.sh
- 上傳到服務(wù)器時(shí)亡鼠,注意配置信息(數(shù)據(jù)庫(kù)配置赏殃,端口號(hào)配置,日志文件位置配置)间涵,端口號(hào)寫(xiě)死在startup.sh腳本里仁热,注意修改portal里的dev.meta的環(huán)境為你的configservice的ip:端口號(hào)
參考文檔: