配置中心是微服务的基础组件,携程开源的apollo是业界比较知名的一个https://github.com/apolloconfig/apollo/下面我们通过搭建apollo系统,并且启动一个golang的客户端来演示apollo是如何工作的,apollo依赖mysql来管理元数据,因此需要部署mysql
version: '2'services:apollo-quick-start:image: nobodyiam/apollo-quick-startcontainer_name: apollo-quick-startdepends_on:- apollo-dbports:- "8080:8080"- "8070:8070"- "8090:8090"volumes:- ~/learn/apollo/docker-quick-start/demo.sh:/apollo-quick-start/demo.shlinks:- apollo-dbenvironment:JAVA_OPTS: '-Xms100m -Xmx1000m -Xmn100m -Xss256k -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=250m'# APOLLO_CONFIG_DB_USERNAME: 'root'# APOLLO_CONFIG_DB_PASSWORD: 'apollo'# APOLLO_PORTAL_DB_USERNAME: 'root'# APOLLO_PORTAL_DB_PASSWORD: 'apollo'extra_hosts:- host.docker.internal:host-gatewayapollo-db:image: mysql:5.7container_name: apollo-dbenvironment:TZ: Asia/ShanghaiMYSQL_ALLOW_EMPTY_PASSWORD: 'yes'# MYSQL_ROOT_PASSWORD: 'apollo'depends_on:- apollo-dbdataports:- "13306:3306"volumes:- ./sql:/docker-entrypoint-initdb.dvolumes_from:- apollo-dbdataextra_hosts:- host.docker.internal:host-gatewayapollo-dbdata:image: alpine:latestcontainer_name: apollo-dbdatavolumes:- /var/lib/mysqlextra_hosts:- host.docker.internal:host-gateway
然后启动服务
cd learn/apollo/docker-quick-start% docker-compose up
等mysql启动后,导入mysql的数据库
mysql -uroot -h127.0.0.1 -P13306 -e "source ./sql/apolloportaldb.sql"mysql -uroot -h127.0.0.1 -P13306 -e "source ./sql/apolloconfigdb.sql"
导入的mysql如下
apolloconfigdb.sql
---- Copyright 2022 Apollo Authors---- Licensed under the Apache License, Version 2.0 (the "License");-- you may not use this file except in compliance with the License.-- You may obtain a copy of the License at---- http://www.apache.org/licenses/LICENSE-2.0---- Unless required by applicable law or agreed to in writing, software-- distributed under the License is distributed on an "AS IS" BASIS,-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-- See the License for the specific language governing permissions and-- limitations under the License.--/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;# Create Database# ------------------------------------------------------------CREATE DATABASE IF NOT EXISTS ApolloConfigDB DEFAULT CHARACTER SET = utf8mb4;Use ApolloConfigDB;# Dump of table app# ------------------------------------------------------------DROP TABLE IF EXISTS `App`;CREATE TABLE `App` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',`Name` varchar(500) NOT NULL DEFAULT 'default' COMMENT '应用名',`OrgId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '部门Id',`OrgName` varchar(64) NOT NULL DEFAULT 'default' COMMENT '部门名字',`OwnerName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerName',`OwnerEmail` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerEmail',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_AppId_DeletedAt` (`AppId`,`DeletedAt`),KEY `DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_Name` (`Name`(191))) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用表';# Dump of table appnamespace# ------------------------------------------------------------DROP TABLE IF EXISTS `AppNamespace`;CREATE TABLE `AppNamespace` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',`Name` varchar(32) NOT NULL DEFAULT '' COMMENT 'namespace名字,注意,需要全局唯一',`AppId` varchar(64) NOT NULL DEFAULT '' COMMENT 'app id',`Format` varchar(32) NOT NULL DEFAULT 'properties' COMMENT 'namespace的format类型',`IsPublic` bit(1) NOT NULL DEFAULT b'0' COMMENT 'namespace是否为公共',`Comment` varchar(64) NOT NULL DEFAULT '' COMMENT '注释',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_AppId_Name_DeletedAt` (`AppId`,`Name`,`DeletedAt`),KEY `Name_AppId` (`Name`,`AppId`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用namespace定义';# Dump of table audit# ------------------------------------------------------------DROP TABLE IF EXISTS `Audit`;CREATE TABLE `Audit` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`EntityName` varchar(50) NOT NULL DEFAULT 'default' COMMENT '表名',`EntityId` int(10) unsigned DEFAULT NULL COMMENT '记录ID',`OpName` varchar(50) NOT NULL DEFAULT 'default' COMMENT '操作类型',`Comment` varchar(500) DEFAULT NULL COMMENT '备注',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日志审计表';# Dump of table cluster# ------------------------------------------------------------DROP TABLE IF EXISTS `Cluster`;CREATE TABLE `Cluster` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',`Name` varchar(32) NOT NULL DEFAULT '' COMMENT '集群名字',`AppId` varchar(64) NOT NULL DEFAULT '' COMMENT 'App id',`ParentClusterId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '父cluster',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_AppId_Name_DeletedAt` (`AppId`,`Name`,`DeletedAt`),KEY `IX_ParentClusterId` (`ParentClusterId`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='集群';# Dump of table commit# ------------------------------------------------------------DROP TABLE IF EXISTS `Commit`;CREATE TABLE `Commit` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`ChangeSets` longtext NOT NULL COMMENT '修改变更集',`AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',`ClusterName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ClusterName',`NamespaceName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'namespaceName',`Comment` varchar(500) DEFAULT NULL COMMENT '备注',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),KEY `DataChange_LastTime` (`DataChange_LastTime`),KEY `AppId` (`AppId`(191)),KEY `ClusterName` (`ClusterName`(191)),KEY `NamespaceName` (`NamespaceName`(191))) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='commit 历史表';# Dump of table grayreleaserule# ------------------------------------------------------------DROP TABLE IF EXISTS `GrayReleaseRule`;CREATE TABLE `GrayReleaseRule` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`AppId` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'AppID',`ClusterName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'Cluster Name',`NamespaceName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'Namespace Name',`BranchName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'branch name',`Rules` varchar(16000) DEFAULT '[]' COMMENT '灰度规则',`ReleaseId` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '灰度对应的release',`BranchStatus` tinyint(2) DEFAULT '1' COMMENT '灰度分支状态: 0:删除分支,1:正在使用的规则 2:全量发布',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),KEY `DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_Namespace` (`AppId`,`ClusterName`,`NamespaceName`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='灰度规则表';# Dump of table instance# ------------------------------------------------------------DROP TABLE IF EXISTS `Instance`;CREATE TABLE `Instance` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`AppId` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'AppID',`ClusterName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'ClusterName',`DataCenter` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'Data Center Name',`Ip` varchar(32) NOT NULL DEFAULT '' COMMENT 'instance ip',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `IX_UNIQUE_KEY` (`AppId`,`ClusterName`,`Ip`,`DataCenter`),KEY `IX_IP` (`Ip`),KEY `IX_DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='使用配置的应用实例';# Dump of table instanceconfig# ------------------------------------------------------------DROP TABLE IF EXISTS `InstanceConfig`;CREATE TABLE `InstanceConfig` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`InstanceId` int(11) unsigned DEFAULT NULL COMMENT 'Instance Id',`ConfigAppId` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'Config App Id',`ConfigClusterName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'Config Cluster Name',`ConfigNamespaceName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'Config Namespace Name',`ReleaseKey` varchar(64) NOT NULL DEFAULT '' COMMENT '发布的Key',`ReleaseDeliveryTime` timestamp NULL DEFAULT NULL COMMENT '配置获取时间',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `IX_UNIQUE_KEY` (`InstanceId`,`ConfigAppId`,`ConfigNamespaceName`),KEY `IX_ReleaseKey` (`ReleaseKey`),KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_Valid_Namespace` (`ConfigAppId`,`ConfigClusterName`,`ConfigNamespaceName`,`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用实例的配置信息';# Dump of table item# ------------------------------------------------------------DROP TABLE IF EXISTS `Item`;CREATE TABLE `Item` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`NamespaceId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '集群NamespaceId',`Key` varchar(128) NOT NULL DEFAULT 'default' COMMENT '配置项Key',`Value` longtext NOT NULL COMMENT '配置项值',`Comment` varchar(1024) DEFAULT '' COMMENT '注释',`LineNum` int(10) unsigned DEFAULT '0' COMMENT '行号',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),KEY `IX_GroupId` (`NamespaceId`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置项目';# Dump of table namespace# ------------------------------------------------------------DROP TABLE IF EXISTS `Namespace`;CREATE TABLE `Namespace` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',`AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',`ClusterName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'Cluster Name',`NamespaceName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'Namespace Name',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_AppId_ClusterName_NamespaceName_DeletedAt` (`AppId`(191),`ClusterName`(191),`NamespaceName`(191),`DeletedAt`),KEY `DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_NamespaceName` (`NamespaceName`(191))) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='命名空间';# Dump of table namespacelock# ------------------------------------------------------------DROP TABLE IF EXISTS `NamespaceLock`;CREATE TABLE `NamespaceLock` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',`NamespaceId` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '集群NamespaceId',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',`IsDeleted` bit(1) DEFAULT b'0' COMMENT '软删除',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',PRIMARY KEY (`Id`),UNIQUE KEY `UK_NamespaceId_DeletedAt` (`NamespaceId`,`DeletedAt`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='namespace的编辑锁';# Dump of table release# ------------------------------------------------------------DROP TABLE IF EXISTS `Release`;CREATE TABLE `Release` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',`ReleaseKey` varchar(64) NOT NULL DEFAULT '' COMMENT '发布的Key',`Name` varchar(64) NOT NULL DEFAULT 'default' COMMENT '发布名字',`Comment` varchar(256) DEFAULT NULL COMMENT '发布说明',`AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',`ClusterName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ClusterName',`NamespaceName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'namespaceName',`Configurations` longtext NOT NULL COMMENT '发布配置',`IsAbandoned` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否废弃',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_ReleaseKey_DeletedAt` (`ReleaseKey`,`DeletedAt`),KEY `AppId_ClusterName_GroupName` (`AppId`(191),`ClusterName`(191),`NamespaceName`(191)),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布';# Dump of table releasehistory# ------------------------------------------------------------DROP TABLE IF EXISTS `ReleaseHistory`;CREATE TABLE `ReleaseHistory` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`AppId` varchar(64) NOT NULL DEFAULT 'default' COMMENT 'AppID',`ClusterName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'ClusterName',`NamespaceName` varchar(32) NOT NULL DEFAULT 'default' COMMENT 'namespaceName',`BranchName` varchar(32) NOT NULL DEFAULT 'default' COMMENT '发布分支名',`ReleaseId` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '关联的Release Id',`PreviousReleaseId` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '前一次发布的ReleaseId',`Operation` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '发布类型,0: 普通发布,1: 回滚,2: 灰度发布,3: 灰度规则更新,4: 灰度合并回主分支发布,5: 主分支发布灰度自动发布,6: 主分支回滚灰度自动发布,7: 放弃灰度',`OperationContext` longtext NOT NULL COMMENT '发布上下文信息',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),KEY `IX_Namespace` (`AppId`,`ClusterName`,`NamespaceName`,`BranchName`),KEY `IX_ReleaseId` (`ReleaseId`),KEY `IX_DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布历史';# Dump of table releasemessage# ------------------------------------------------------------DROP TABLE IF EXISTS `ReleaseMessage`;CREATE TABLE `ReleaseMessage` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',`Message` varchar(1024) NOT NULL DEFAULT '' COMMENT '发布的消息内容',`DataChange_LastTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),KEY `DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_Message` (`Message`(191))) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='发布消息';# Dump of table serverconfig# ------------------------------------------------------------DROP TABLE IF EXISTS `ServerConfig`;CREATE TABLE `ServerConfig` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`Key` varchar(64) NOT NULL DEFAULT 'default' COMMENT '配置项Key',`Cluster` varchar(32) NOT NULL DEFAULT 'default' COMMENT '配置对应的集群,default为不针对特定的集群',`Value` varchar(2048) NOT NULL DEFAULT 'default' COMMENT '配置项值',`Comment` varchar(1024) DEFAULT '' COMMENT '注释',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_Key_Cluster_DeletedAt` (`Key`,`Cluster`,`DeletedAt`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置服务自身配置';# Dump of table accesskey# ------------------------------------------------------------DROP TABLE IF EXISTS `AccessKey`;CREATE TABLE `AccessKey` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',`AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',`Secret` varchar(128) NOT NULL DEFAULT '' COMMENT 'Secret',`IsEnabled` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: enabled, 0: disabled',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_AppId_Secret_DeletedAt` (`AppId`,`Secret`,`DeletedAt`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='访问密钥';# Config# ------------------------------------------------------------INSERT INTO `ServerConfig` (`Key`, `Cluster`, `Value`, `Comment`)VALUES('eureka.service.url', 'default', 'http://localhost:8080/eureka/', 'Eureka服务Url,多个service以英文逗号分隔'),('namespace.lock.switch', 'default', 'false', '一次发布只能有一个人修改开关'),('item.value.length.limit', 'default', '20000', 'item value最大长度限制'),('config-service.cache.enabled', 'default', 'false', 'ConfigService是否开启缓存,开启后能提高性能,但是会增大内存消耗!'),('item.key.length.limit', 'default', '128', 'item key 最大长度限制');# Sample Data# ------------------------------------------------------------INSERT INTO `App` (`AppId`, `Name`, `OrgId`, `OrgName`, `OwnerName`, `OwnerEmail`)VALUES('SampleApp', 'Sample App', 'TEST1', '样例部门1', 'apollo', 'apollo@acme.com');INSERT INTO `AppNamespace` (`Name`, `AppId`, `Format`, `IsPublic`, `Comment`)VALUES('application', 'SampleApp', 'properties', 0, 'default app namespace');INSERT INTO `Cluster` (`Name`, `AppId`)VALUES('default', 'SampleApp');INSERT INTO `Namespace` (`Id`, `AppId`, `ClusterName`, `NamespaceName`)VALUES(1, 'SampleApp', 'default', 'application');INSERT INTO `Item` (`NamespaceId`, `Key`, `Value`, `Comment`, `LineNum`)VALUES(1, 'timeout', '100', 'sample timeout配置', 1);INSERT INTO `Release` (`ReleaseKey`, `Name`, `Comment`, `AppId`, `ClusterName`, `NamespaceName`, `Configurations`)VALUES('20161009155425-d3a0749c6e20bc15', '20161009155424-release', 'Sample发布', 'SampleApp', 'default', 'application', '{\"timeout\":\"100\"}');INSERT INTO `ReleaseHistory` (`AppId`, `ClusterName`, `NamespaceName`, `BranchName`, `ReleaseId`, `PreviousReleaseId`, `Operation`, `OperationContext`, `DataChange_CreatedBy`, `DataChange_LastModifiedBy`)VALUES('SampleApp', 'default', 'application', 'default', 1, 0, 0, '{}', 'apollo', 'apollo');INSERT INTO `ReleaseMessage` (`Message`)VALUES('SampleApp+default+application');/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
apolloportaldb.sql
---- Copyright 2022 Apollo Authors---- Licensed under the Apache License, Version 2.0 (the "License");-- you may not use this file except in compliance with the License.-- You may obtain a copy of the License at---- http://www.apache.org/licenses/LICENSE-2.0---- Unless required by applicable law or agreed to in writing, software-- distributed under the License is distributed on an "AS IS" BASIS,-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.-- See the License for the specific language governing permissions and-- limitations under the License.--/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;# Create Database# ------------------------------------------------------------CREATE DATABASE IF NOT EXISTS ApolloPortalDB DEFAULT CHARACTER SET = utf8mb4;Use ApolloPortalDB;# Dump of table app# ------------------------------------------------------------DROP TABLE IF EXISTS `App`;CREATE TABLE `App` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',`Name` varchar(500) NOT NULL DEFAULT 'default' COMMENT '应用名',`OrgId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '部门Id',`OrgName` varchar(64) NOT NULL DEFAULT 'default' COMMENT '部门名字',`OwnerName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerName',`OwnerEmail` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerEmail',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_AppId_DeletedAt` (`AppId`,`DeletedAt`),KEY `DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_Name` (`Name`(191))) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用表';# Dump of table appnamespace# ------------------------------------------------------------DROP TABLE IF EXISTS `AppNamespace`;CREATE TABLE `AppNamespace` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',`Name` varchar(32) NOT NULL DEFAULT '' COMMENT 'namespace名字,注意,需要全局唯一',`AppId` varchar(64) NOT NULL DEFAULT '' COMMENT 'app id',`Format` varchar(32) NOT NULL DEFAULT 'properties' COMMENT 'namespace的format类型',`IsPublic` bit(1) NOT NULL DEFAULT b'0' COMMENT 'namespace是否为公共',`Comment` varchar(64) NOT NULL DEFAULT '' COMMENT '注释',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_AppId_Name_DeletedAt` (`AppId`,`Name`,`DeletedAt`),KEY `Name_AppId` (`Name`,`AppId`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用namespace定义';# Dump of table consumer# ------------------------------------------------------------DROP TABLE IF EXISTS `Consumer`;CREATE TABLE `Consumer` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',`Name` varchar(500) NOT NULL DEFAULT 'default' COMMENT '应用名',`OrgId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '部门Id',`OrgName` varchar(64) NOT NULL DEFAULT 'default' COMMENT '部门名字',`OwnerName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerName',`OwnerEmail` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerEmail',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_AppId_DeletedAt` (`AppId`,`DeletedAt`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='开放API消费者';# Dump of table consumeraudit# ------------------------------------------------------------DROP TABLE IF EXISTS `ConsumerAudit`;CREATE TABLE `ConsumerAudit` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`ConsumerId` int(11) unsigned DEFAULT NULL COMMENT 'Consumer Id',`Uri` varchar(1024) NOT NULL DEFAULT '' COMMENT '访问的Uri',`Method` varchar(16) NOT NULL DEFAULT '' COMMENT '访问的Method',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_ConsumerId` (`ConsumerId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='consumer审计表';# Dump of table consumerrole# ------------------------------------------------------------DROP TABLE IF EXISTS `ConsumerRole`;CREATE TABLE `ConsumerRole` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`ConsumerId` int(11) unsigned DEFAULT NULL COMMENT 'Consumer Id',`RoleId` int(10) unsigned DEFAULT NULL COMMENT 'Role Id',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_ConsumerId_RoleId_DeletedAt` (`ConsumerId`,`RoleId`,`DeletedAt`),KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_RoleId` (`RoleId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='consumer和role的绑定表';# Dump of table consumertoken# ------------------------------------------------------------DROP TABLE IF EXISTS `ConsumerToken`;CREATE TABLE `ConsumerToken` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`ConsumerId` int(11) unsigned DEFAULT NULL COMMENT 'ConsumerId',`Token` varchar(128) NOT NULL DEFAULT '' COMMENT 'token',`Expires` datetime NOT NULL DEFAULT '2099-01-01 00:00:00' COMMENT 'token失效时间',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_Token_DeletedAt` (`Token`,`DeletedAt`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='consumer token表';# Dump of table favorite# ------------------------------------------------------------DROP TABLE IF EXISTS `Favorite`;CREATE TABLE `Favorite` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`UserId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '收藏的用户',`AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',`Position` int(32) NOT NULL DEFAULT '10000' COMMENT '收藏顺序',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_UserId_AppId_DeletedAt` (`UserId`,`AppId`,`DeletedAt`),KEY `AppId` (`AppId`(191)),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COMMENT='应用收藏表';# Dump of table permission# ------------------------------------------------------------DROP TABLE IF EXISTS `Permission`;CREATE TABLE `Permission` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`PermissionType` varchar(32) NOT NULL DEFAULT '' COMMENT '权限类型',`TargetId` varchar(256) NOT NULL DEFAULT '' COMMENT '权限对象类型',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_TargetId_PermissionType_DeletedAt` (`TargetId`,`PermissionType`,`DeletedAt`),KEY `IX_DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='permission表';# Dump of table role# ------------------------------------------------------------DROP TABLE IF EXISTS `Role`;CREATE TABLE `Role` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`RoleName` varchar(256) NOT NULL DEFAULT '' COMMENT 'Role name',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_RoleName_DeletedAt` (`RoleName`,`DeletedAt`),KEY `IX_DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';# Dump of table rolepermission# ------------------------------------------------------------DROP TABLE IF EXISTS `RolePermission`;CREATE TABLE `RolePermission` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`RoleId` int(10) unsigned DEFAULT NULL COMMENT 'Role Id',`PermissionId` int(10) unsigned DEFAULT NULL COMMENT 'Permission Id',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_RoleId_PermissionId_DeletedAt` (`RoleId`,`PermissionId`,`DeletedAt`),KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_PermissionId` (`PermissionId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色和权限的绑定表';# Dump of table serverconfig# ------------------------------------------------------------DROP TABLE IF EXISTS `ServerConfig`;CREATE TABLE `ServerConfig` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`Key` varchar(64) NOT NULL DEFAULT 'default' COMMENT '配置项Key',`Value` varchar(2048) NOT NULL DEFAULT 'default' COMMENT '配置项值',`Comment` varchar(1024) DEFAULT '' COMMENT '注释',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_Key_DeletedAt` (`Key`,`DeletedAt`),KEY `DataChange_LastTime` (`DataChange_LastTime`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='配置服务自身配置';# Dump of table userrole# ------------------------------------------------------------DROP TABLE IF EXISTS `UserRole`;CREATE TABLE `UserRole` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`UserId` varchar(128) DEFAULT '' COMMENT '用户身份标识',`RoleId` int(10) unsigned DEFAULT NULL COMMENT 'Role Id',`IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',`DeletedAt` BIGINT(20) NOT NULL DEFAULT '0' COMMENT 'Delete timestamp based on milliseconds',`DataChange_CreatedBy` varchar(64) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',`DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`DataChange_LastModifiedBy` varchar(64) DEFAULT '' COMMENT '最后修改人邮箱前缀',`DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`Id`),UNIQUE KEY `UK_UserId_RoleId_DeletedAt` (`UserId`,`RoleId`,`DeletedAt`),KEY `IX_DataChange_LastTime` (`DataChange_LastTime`),KEY `IX_RoleId` (`RoleId`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户和role的绑定表';# Dump of table Users# ------------------------------------------------------------DROP TABLE IF EXISTS `Users`;CREATE TABLE `Users` (`Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`Username` varchar(64) NOT NULL DEFAULT 'default' COMMENT '用户登录账户',`Password` varchar(512) NOT NULL DEFAULT 'default' COMMENT '密码',`UserDisplayName` varchar(512) NOT NULL DEFAULT 'default' COMMENT '用户名称',`Email` varchar(64) NOT NULL DEFAULT 'default' COMMENT '邮箱地址',`Enabled` tinyint(4) DEFAULT NULL COMMENT '是否有效',PRIMARY KEY (`Id`),UNIQUE KEY `UK_Username` (`Username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';# Dump of table Authorities# ------------------------------------------------------------DROP TABLE IF EXISTS `Authorities`;CREATE TABLE `Authorities` (`Id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增Id',`Username` varchar(64) NOT NULL,`Authority` varchar(50) NOT NULL,PRIMARY KEY (`Id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;# Config# ------------------------------------------------------------INSERT INTO `ServerConfig` (`Key`, `Value`, `Comment`)VALUES('apollo.portal.envs', 'dev', '可支持的环境列表'),('organizations', '[{\"orgId\":\"TEST1\",\"orgName\":\"样例部门1\"},{\"orgId\":\"TEST2\",\"orgName\":\"样例部门2\"}]', '部门列表'),('superAdmin', 'apollo', 'Portal超级管理员'),('api.readTimeout', '10000', 'http接口read timeout'),('consumer.token.salt', 'someSalt', 'consumer token salt'),('admin.createPrivateNamespace.switch', 'true', '是否允许项目管理员创建私有namespace'),('configView.memberOnly.envs', 'dev', '只对项目成员显示配置信息的环境列表,多个env以英文逗号分隔'),('apollo.portal.meta.servers', '{}', '各环境Meta Service列表');INSERT INTO `Users` (`Username`, `Password`, `UserDisplayName`, `Email`, `Enabled`)VALUES('apollo', '$2a$10$7r20uS.BQ9uBpf3Baj3uQOZvMVvB1RN3PYoKE94gtz2.WAOuiiwXS', 'apollo', 'apollo@acme.com', 1);INSERT INTO `Authorities` (`Username`, `Authority`) VALUES ('apollo', 'ROLE_user');# Sample Data# ------------------------------------------------------------INSERT INTO `App` (`AppId`, `Name`, `OrgId`, `OrgName`, `OwnerName`, `OwnerEmail`)VALUES('SampleApp', 'Sample App', 'TEST1', '样例部门1', 'apollo', 'apollo@acme.com');INSERT INTO `AppNamespace` (`Name`, `AppId`, `Format`, `IsPublic`, `Comment`)VALUES('application', 'SampleApp', 'properties', 0, 'default app namespace');INSERT INTO `Permission` (`Id`, `PermissionType`, `TargetId`)VALUES(1, 'CreateCluster', 'SampleApp'),(2, 'CreateNamespace', 'SampleApp'),(3, 'AssignRole', 'SampleApp'),(4, 'ModifyNamespace', 'SampleApp+application'),(5, 'ReleaseNamespace', 'SampleApp+application');INSERT INTO `Role` (`Id`, `RoleName`)VALUES(1, 'Master+SampleApp'),(2, 'ModifyNamespace+SampleApp+application'),(3, 'ReleaseNamespace+SampleApp+application');INSERT INTO `RolePermission` (`RoleId`, `PermissionId`)VALUES(1, 1),(1, 2),(1, 3),(2, 4),(3, 5);INSERT INTO `UserRole` (`UserId`, `RoleId`)VALUES('apollo', 1),('apollo', 2),('apollo', 3);-- spring session (https://github.com/spring-projects/spring-session/blob/faee8f1bdb8822a5653a81eba838dddf224d92d6/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc/schema-mysql.sql)CREATE TABLE SPRING_SESSION (PRIMARY_ID CHAR(36) NOT NULL,SESSION_ID CHAR(36) NOT NULL,CREATION_TIME BIGINT NOT NULL,LAST_ACCESS_TIME BIGINT NOT NULL,MAX_INACTIVE_INTERVAL INT NOT NULL,EXPIRY_TIME BIGINT NOT NULL,PRINCIPAL_NAME VARCHAR(100),CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);CREATE TABLE SPRING_SESSION_ATTRIBUTES (SESSION_PRIMARY_ID CHAR(36) NOT NULL,ATTRIBUTE_NAME VARCHAR(200) NOT NULL,ATTRIBUTE_BYTES BLOB NOT NULL,CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
启动成功后我们可以看到
apollo-db | 2022-10-31T14:45:51.720326Z 0 [Note] Skipping generation of RSA key pair as key files are present in data directory.apollo-db | 2022-10-31T14:45:51.730496Z 0 [Note] InnoDB: Buffer pool(s) load completed at 221031 22:45:51apollo-db | 2022-10-31T14:45:51.731010Z 0 [Note] Server hostname (bind-address): '*'; port: 3306apollo-db | 2022-10-31T14:45:51.731188Z 0 [Note] IPv6 is available.apollo-db | 2022-10-31T14:45:51.731250Z 0 [Note] - '::' resolves to '::';apollo-db | 2022-10-31T14:45:51.731281Z 0 [Note] Server socket created on IP: '::'.apollo-db | 2022-10-31T14:45:51.748197Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.apollo-quick-start | ==== starting service ====apollo-quick-start | Service logging file is ./service/apollo-service.logapollo-db | 2022-10-31T14:45:51.817694Z 0 [Note] Event Scheduler: Loaded 0 eventsapollo-db | 2022-10-31T14:45:51.817971Z 0 [Note] mysqld: ready for connections.apollo-db | Version: '5.7.40' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL)apollo-quick-start | Application is running as root (UID 0). This is considered insecure.apollo-quick-start | Started [56]apollo-quick-start | Waiting for config service startup................apollo-quick-start | Config service started. You may visit http://host.docker.internal:8080 for service status now!apollo-quick-start | Waiting for admin service startup..apollo-quick-start | Admin service startedapollo-quick-start | ==== starting portal ====apollo-quick-start | Portal logging file is ./portal/apollo-portal.logapollo-quick-start | Application is running as root (UID 0). This is considered insecure.apollo-quick-start | Started [309]apollo-db | 2022-10-31T14:48:11.078536Z 22 [Note] Got timeout reading communication packetsapollo-quick-start | Waiting for portal startup..............apollo-quick-start | Portal started. You can visit http://host.docker.internal:8070 now!
然后启动我们的apollo-service
% docker exec -i apollo-quick-start apollo-quick-start/demo.sh startJAVA_OPTS = -Xms100m -Xmx1000m -Xmn100m -Xss256k -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=250m==== starting service ====Service logging file is ./service/apollo-service.logApplication is running as root (UID 0). This is considered insecure.Started [494]Waiting for config service startupConfig service started. You may visit http://host.docker.internal:8080 for service status now!Waiting for admin service startupAdmin service started==== starting portal ====Portal logging file is ./portal/apollo-portal.logApplication is running as root (UID 0). This is considered insecure.Started [538]Waiting for portal startupPortal started. You can visit http://host.docker.internal:8070 now!
打开链接http://127.0.0.1:8070/app/access_key.html?#/appid=golang,用户名apollo,密码admin进行配置
启动demo客户端测试下
% docker exec -i apollo-quick-start apollo-quick-start/demo.sh clientJAVA_OPTS = -Xms100m -Xmx1000m -Xmn100m -Xss256k -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=250m[apollo-demo][main]2022-10-31 10:21:44,058 INFO [com.ctrip.framework.foundation.internals.provider.DefaultApplicationProvider] App ID is set to SampleApp by app.id property from META-INF/app.properties[apollo-demo][main]2022-10-31 10:21:44,059 WARN [com.ctrip.framework.foundation.internals.provider.DefaultApplicationProvider] app.label is not available from System Property and META-INF/app.properties. It is set to null[apollo-demo][main]2022-10-31 10:21:44,061 INFO [com.ctrip.framework.foundation.internals.provider.DefaultServerProvider] Environment is set to [dev] by JVM system property 'env'.[apollo-demo][main]2022-10-31 10:21:44,122 INFO [com.ctrip.framework.apollo.internals.DefaultMetaServerProvider] Located meta services from apollo.meta configuration: http://host.docker.internal:8080![apollo-demo][main]2022-10-31 10:21:44,123 INFO [com.ctrip.framework.apollo.core.MetaDomainConsts] Located meta server address http://host.docker.internal:8080 for env DEV from com.ctrip.framework.apollo.internals.DefaultMetaServerProviderApollo Config Demo. Please input key to get the value. Input quit to exit.>
> timeoutLoading key : timeout with value: 100
切换到sampleApp发送一个配置,可以看到客户端收到变化了
> Changes for namespace applicationChange - key: 12131, oldValue: null, newValue: 12131, changeType: ADDED
demo.sh内容如下
#!/bin/bash# handle envif [[ -n "$JAVA_OPTS" ]]; thenecho JAVA_OPTS = $JAVA_OPTSfiif [[ -n "$APOLLO_CONFIG_DB_USERNAME" ]]; thenecho APOLLO_CONFIG_DB_USERNAME = "$APOLLO_CONFIG_DB_USERNAME"fiif [[ -n "$APOLLO_CONFIG_DB_PASSWORD" ]]; thenecho APOLLO_CONFIG_DB_PASSWORD = "${APOLLO_CONFIG_DB_PASSWORD//?/*}"fiif [[ -n "$APOLLO_PORTAL_DB_USERNAME" ]]; thenecho APOLLO_PORTAL_DB_USERNAME = "$APOLLO_PORTAL_DB_USERNAME"fiif [[ -n "$APOLLO_PORTAL_DB_PASSWORD" ]]; thenecho APOLLO_PORTAL_DB_PASSWORD = "${APOLLO_PORTAL_DB_PASSWORD//?/*}"fi# apollo config db infoapollo_config_db_url="jdbc:mysql://apollo-db:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"apollo_config_db_username=${APOLLO_CONFIG_DB_USERNAME:-root}apollo_config_db_password=${APOLLO_CONFIG_DB_PASSWORD:-}# apollo portal db infoapollo_portal_db_url="jdbc:mysql://apollo-db:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"apollo_portal_db_username=${APOLLO_PORTAL_DB_USERNAME:-root}apollo_portal_db_password=${APOLLO_PORTAL_DB_PASSWORD:-}# =============== Please do not modify the following content =============== #if [ "$(uname)" == "Darwin" ]; thenwindows="0"elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; thenwindows="0"elif [ "$(expr substr $(uname -s) 1 5)" == "MINGW" ]; thenwindows="1"elsewindows="0"fi# meta server url#host=docker.for.mac.host.internal# host=localhosthost=host.docker.internalconfig_server_url=http://${host}:8080admin_server_url=http://${host}:8090eureka_service_url=$config_server_url/eureka/portal_url=http://${host}:8070# JAVA OPTSBASE_JAVA_OPTS="$JAVA_OPTS -Denv=dev"CLIENT_JAVA_OPTS="$BASE_JAVA_OPTS -Dapollo.meta=$config_server_url"SERVER_JAVA_OPTS="$BASE_JAVA_OPTS -Dspring.profiles.active=github -Deureka.service.url=$eureka_service_url"PORTAL_JAVA_OPTS="$BASE_JAVA_OPTS -Ddev_meta=$config_server_url -Dspring.profiles.active=github,auth -Deureka.client.enabled=false -Dhibernate.query.plan_cache_max_size=192"# executableJAR_FILE=apollo-all-in-one.jarSERVICE_DIR=./serviceSERVICE_JAR_NAME=apollo-service.jarSERVICE_JAR=$SERVICE_DIR/$SERVICE_JAR_NAMESERVICE_LOG=$SERVICE_DIR/apollo-service.logPORTAL_DIR=./portalPORTAL_JAR_NAME=apollo-portal.jarPORTAL_JAR=$PORTAL_DIR/$PORTAL_JAR_NAMEPORTAL_LOG=$PORTAL_DIR/apollo-portal.logCLIENT_DIR=./clientCLIENT_JAR=$CLIENT_DIR/apollo-demo.jar# go to script directorycd "${0%/*}"function checkJava {if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; thenif [ "$windows" == "1" ]; thentmp_java_home=`cygpath -sw "$JAVA_HOME"`export JAVA_HOME=`cygpath -u "$tmp_java_home"`echo "Windows new JAVA_HOME is: $JAVA_HOME"fi_java="$JAVA_HOME/bin/java"elif type -p java > dev/null; then_java=javaelseecho "Could not find java executable, please check PATH and JAVA_HOME variables."exit 1fiif [[ "$_java" ]]; thenversion=$("$_java" -version 2>&1 | awk -F '"' '/version/ {print $2}')version_in_digit=$(echo "$version" | awk -F. '{printf("%03d%03d",$1,$2);}')if [[ $version_in_digit < 001008 ]]; thenecho "Java version is $version, please make sure java 1.8+ is in the path"exit 1fifi}function checkServerAlive {declare -i counter=0declare -i max_counter=24 # 24*5=120sdeclare -i total_time=0SERVER_URL="$1"until [[ (( counter -ge max_counter )) || "$(curl -X GET --silent --connect-timeout 1 --max-time 2 --head $SERVER_URL | grep "HTTP")" != "" ]];doprintf "."counter+=1sleep 5donetotal_time=counter*5if [[ (( counter -ge max_counter )) ]];thenreturn $total_timefireturn 0}checkJavaif [ "$1" = "start" ] ; thenecho "==== starting service ===="echo "Service logging file is $SERVICE_LOG"export APP_NAME="apollo-service"export JAVA_OPTS="$SERVER_JAVA_OPTS -Dlogging.file.name=./apollo-service.log -Dspring.datasource.url=$apollo_config_db_url -Dspring.datasource.username=$apollo_config_db_username -Dspring.datasource.password=$apollo_config_db_password"if [[ -f $SERVICE_JAR ]]; thenrm -rf $SERVICE_JARfiln $JAR_FILE $SERVICE_JARchmod a+x $SERVICE_JAR$SERVICE_JAR start --configservice --adminservicerc=$?if [[ $rc != 0 ]];thenecho "Failed to start service, return code: $rc. Please check $SERVICE_LOG for more information."exit $rc;fiprintf "Waiting for config service startup"checkServerAlive $config_server_urlrc=$?if [[ $rc != 0 ]];thenprintf "\nConfig service failed to start in $rc seconds! Please check $SERVICE_LOG for more information.\n"exit 1;fiprintf "\nConfig service started. You may visit $config_server_url for service status now!\n"printf "Waiting for admin service startup"checkServerAlive $admin_server_urlrc=$?if [[ $rc != 0 ]];thenprintf "\nAdmin service failed to start in $rc seconds! Please check $SERVICE_LOG for more information.\n"exit 1;fiprintf "\nAdmin service started\n"echo "==== starting portal ===="echo "Portal logging file is $PORTAL_LOG"export APP_NAME="apollo-portal"export JAVA_OPTS="$PORTAL_JAVA_OPTS -Dlogging.file.name=./apollo-portal.log -Dserver.port=8070 -Dspring.datasource.url=$apollo_portal_db_url -Dspring.datasource.username=$apollo_portal_db_username -Dspring.datasource.password=$apollo_portal_db_password"if [[ -f $PORTAL_JAR ]]; thenrm -rf $PORTAL_JARfiln $JAR_FILE $PORTAL_JARchmod a+x $PORTAL_JAR$PORTAL_JAR start --portalrc=$?if [[ $rc != 0 ]];thenecho "Failed to start portal, return code: $rc. Please check $PORTAL_LOG for more information."exit $rc;fiprintf "Waiting for portal startup"checkServerAlive $portal_urlrc=$?if [[ $rc != 0 ]];thenprintf "\nPortal failed to start in $rc seconds! Please check $PORTAL_LOG for more information.\n"exit 1;fiprintf "\nPortal started. You can visit $portal_url now!\n"tail -f dev/nullelif [ "$1" = "client" ] ; thenif [ "$windows" == "1" ]; thenjava -classpath "$CLIENT_DIR;$CLIENT_JAR" $CLIENT_JAVA_OPTS com.ctrip.framework.apollo.demo.api.SimpleApolloConfigDemoelsejava -classpath $CLIENT_DIR:$CLIENT_JAR $CLIENT_JAVA_OPTS com.ctrip.framework.apollo.demo.api.SimpleApolloConfigDemofielif [ "$1" = "stop" ] ; thenecho "==== stopping portal ===="export APP_NAME="apollo-portal"cd $PORTAL_DIR./$PORTAL_JAR_NAME stopcd ..echo "==== stopping service ===="export APP_NAME="apollo-service"cd $SERVICE_DIR./$SERVICE_JAR_NAME stopelseecho "Usage: demo.sh ( commands ... )"echo "commands:"echo " start start services and portal"echo " client start client demo program"echo " stop stop services and portal"exit 1fi
定义一个golang应用,namespace也取名字叫golang

定义一个应用密钥

启动我们的golang客户端尝试读取下
package mainimport ("fmt""github.com/apolloconfig/agollo/v4""github.com/apolloconfig/agollo/v4/env/config")func main() {c := &config.AppConfig{AppID: "golang",Cluster: "dev",IP: "http://127.0.0.1:8080",NamespaceName: "golang",IsBackupConfig: true,Secret: "217f7c31263a421389fd4d2a66e4abd1",}//agollo.SetLogger(&DefaultLogger{})client, _ := agollo.StartWithConfig(func() (*config.AppConfig, error) {return c, nil})fmt.Println("初始化Apollo配置成功")//Use your apollo key to testcache := client.GetConfigCache(c.NamespaceName)value, _ := cache.Get("conf")fmt.Println(value)}
% go run learn/apollo/client.go初始化Apollo配置成功conf
接着测试下watch功能
package mainimport ("fmt""github.com/apolloconfig/agollo/v4""github.com/apolloconfig/agollo/v4/env/config""github.com/apolloconfig/agollo/v4/storage""sync")func main() {c := &config.AppConfig{AppID: "golang",Cluster: "dev",IP: "http://127.0.0.1:8080",NamespaceName: "golang",IsBackupConfig: false,Secret: "217f7c31263a421389fd4d2a66e4abd1",}c2 := &CustomChangeListener{}c2.wg.Add(5)client,err:=agollo.StartWithConfig(func() (*config.AppConfig, error) {return c, nil})client.AddChangeListener(c2)fmt.Println("err:", err)c2.wg.Wait()writeConfig(c.NamespaceName,client)}func writeConfig(namespace string,client agollo.Client) {cache := client.GetConfigCache(namespace)cache.Range(func(key, value interface{}) bool {fmt.Println("key : ", key, ", value :", value)return true})}type CustomChangeListener struct {wg sync.WaitGroup}func (c *CustomChangeListener) OnChange(changeEvent *storage.ChangeEvent) {//write your code herefmt.Println(changeEvent.Changes)for key, value := range changeEvent.Changes {fmt.Println("change key : ", key, ", value :", value)}fmt.Println(changeEvent.Namespace)c.wg.Done()}func (c *CustomChangeListener) OnNewestChange(event *storage.FullChangeEvent) {//write your code here}
% go run learn/apollo/listener/main.goerr: <nil>map[conf:0xc00018a300]change key : conf , value : &{conf conf1 1}golang

