0%

Apollo部署使用

安裝包

下載安裝包
1
2
3
4
5
apollo-configservice-x.x.x-github.zip

apollo-adminservice-x.x.x-github.zip

apollo-portal-x.x.x-github.zip

網址: https://github.com/ctripcorp/apollo/releases

獲取sql
1
2
3
apolloconfigdb.sql

apolloportaldb.sql

網址: https://github.com/ctripcorp/apollo/tree/master/scripts/sql

jdk
  • Apollo服務端:1.8+
  • Apollo客戶端:1.7+
Mysql:
  • 版本要求:5.6.5+

部署

目錄:

D:\java\other\apollo

如圖:

執行SQL,會生成兩個庫:

1
2
3
ApolloPortalDB

ApolloConfigDB

如圖:

配置:

  • apollo-configservice

打開\apollo-configservice\scripts\startup.sh,將端口改為:8111,
如下:

1
SERVER_PORT=${SERVER_PORT:=8111}

打開\apollo-configservice\config\application-github.properties,修改mysql數據庫連接字符串,
如下:

1
2
3
4
# DataSource
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = 123456

打開\apollo-configservice\scripts\startup.sh,

打開cmd,輸入:

1
netstat -nao

如圖:

  • apollo-adminservice

打開\apollo-adminservice\config\application-github.properties,修改mysql數據庫連接字符串, 如下:

1
2
3
4
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = 123456

打開\apollo-adminservice\scripts\startup.sh,

打開cmd,輸入:

1
netstat -nao
  • apollo-portal

打開\apollo-portal\config\application-github.properties,修改mysql數據庫連接字符串, 如下:

1
2
3
4
# DataSource
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = 123456

默認當前項目中,可用環境為env,
如圖:

打開\apollo-portal\config\apollo-env.properties,內容如下:

1
2
3
4
5
6
local.meta=http://localhost:8111
dev.meta=http://localhost:8111
fat.meta=http://fill-in-fat-meta-server:8080
uat.meta=http://fill-in-uat-meta-server:8080
lpt.meta=${lpt_meta}
pro.meta=http://fill-in-pro-meta-server:8080

打開\apollo-portal\scripts\startup.sh,

打開cmd,輸入:

1
netstat -nao

登錄:

打開:http://127.0.0.1:8070/

輸入賬號/密碼:apollo/admin

如圖:

系統參數

點擊“管理員工具”-“系統參數”,菜單進入應用配置頁面,通過organizations關鍵字查詢部門信息,如圖:

修改value值,追加一個部門[mstest,微服務測試部門],修改完一分鐘實時生效,內容如下:

1
[{"orgId":"TEST1","orgName":"樣例部門1"},{"orgId":"TEST2","orgName":"樣例部門2"},{"orgId":"mstest","orgName":"微服務測試部門"}]

如圖:

用戶管理

填寫用戶信息,點擊提交,一分鐘實時生效,新增用戶[msuser,msuser],

如圖:

創建項目

現在創建項目,就可以選擇剛才添加用戶。在項目分配了負責人 msuser,如果使msuser登錄的話,則只能看到他自己負責的項目。而 apollo 用戶是超級管理員所以可以看到所有項目。

1
2
3
4
5
6
7
部門:指定的部門

AppId:應用唯一標識

應用名稱: 應用的名稱,建議格式 xx-yy-zz

應用負責人:指定的用戶

如圖:

Namespace

創建一個類型為private的Namespace,

如圖:

權限管理

可以給指定用戶添加對該應用的修改權和發布權。

如圖:

新增配置

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=UTC

spring.datasource.username=root

spring.datasource.password=123456

如圖:

客戶端接入和操作

創建一個基礎工程 Spring Boot,命名: apollodemo,增加依賴:

1
2
3
4
5
6
7
8
9
10
<!-- 網址為:

https://mvnrepository.com/artifact/com.ctrip.framework.apollo/apollo-client

-->
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.7.0</version>
</dependency>

pom.xml 內容如下:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!-- springboot版本與springcloud須匹配 -->
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test</groupId>
<artifactId>apollodemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>apollodemo</name>
<description>Demo project for Spring Boot</description>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<!-- springboot版本與springcloud須匹配 -->
<spring.boot.version>2.1.4.RELEASE</spring.boot.version>
<spring.cloud.version>Greenwich.SR1</spring.cloud.version>
<spring.maven.version>2.4.1</spring.maven.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.7.0</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>

</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.maven.version}</version>
</plugin>
</plugins>
</build>

</project>

application.yml,內容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server:
port: 9111 # 端口

spring:
application:
name: msproj-demo # 應用名稱

# apollo 相關配置
app:
id: msproj # 與 Apollo 配置中心中的 AppId 一致

apollo:
meta: http://localhost:8111 # Apollo 中的 Eureka 注冊中心地址
#cluster: # 指定 Apollo 集群,相同集群實例使用對應集群的配置
#cacheDir: # 配置緩存目錄,網絡不可用時任然可提供配置服務
bootstrap:
enable: true # 啟用 apollo

env: DEV # 指定環境

ApollodemoApplication類,內容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.test.apollodemo;

import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


@EnableApolloConfig({"application", "test1"})//注入
@SpringBootApplication
public class ApollodemoApplication {

public static void main(String[] args) {
SpringApplication.run(ApollodemoApplication.class, args);
}

}

ConfigProperties類,內容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.test.apollodemo.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ConfigProperties {

@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
}

ConfigController類,內容如下:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.test.apollodemo.controller;


import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
import com.test.apollodemo.config.ConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
public class ConfigController {

@Autowired
private ConfigProperties configProperties;

/**
* 注入方式
* @return
*/
@GetMapping("/getDB")
public Map<Object, Object> getDB() {

Map<Object, Object> map = new HashMap<Object, Object>();
map.put("url", configProperties.getUrl());
map.put("username", configProperties.getUsername());
map.put("password", configProperties.getPassword());

return map;
}

/**
* 用API方式獲取
* @return
*/
@GetMapping("/getDBAPI")
public Map<Object, Object> getDBAPI() {

Config config = ConfigService.getConfig("test1");
// 獲取配置信息,第一個參數為配置項的 key,第二個參數為默認值(讀取不到配置就會使用默認值,建議都加上默認值)

String url = config.getProperty("spring.datasource.url", null);
String username = config.getProperty("spring.datasource.username", null);
String password = config.getProperty("spring.datasource.password", null);


Map<Object, Object> map = new HashMap<Object, Object>();
map.put("url", url);
map.put("username", username);
map.put("password", password);

return map;
}
}

運行后,輸入:http://localhost:9111/getDB

如圖:

http://localhost:9111/getDBAPI

如圖:

切換到apollo界面,修改Key為spring.datasource.url,點擊發布,可以看看是否成功,

如圖:

layicr 微信支付

微信支付

layicr 支付寶

支付寶