暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mac 上学习k8s系列(50)配置中心Apollo

        配置中心是微服务的基础组件,携程开源的apollo是业界比较知名的一个https://github.com/apolloconfig/apollo/下面我们通过搭建apollo系统,并且启动一个golang的客户端来演示apollo是如何工作的,apollo依赖mysql来管理元数据,因此需要部署mysql

    version: '2'


    services:
    apollo-quick-start:
    image: nobodyiam/apollo-quick-start
    container_name: apollo-quick-start
    depends_on:
    - apollo-db
    ports:
    - "8080:8080"
    - "8070:8070"
    - "8090:8090"
    volumes:
    - ~/learn/apollo/docker-quick-start/demo.sh:/apollo-quick-start/demo.sh
    links:
    - apollo-db
    environment:
    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-gateway
    apollo-db:
    image: mysql:5.7
    container_name: apollo-db
    environment:
    TZ: Asia/Shanghai
    MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    # MYSQL_ROOT_PASSWORD: 'apollo'
    depends_on:
    - apollo-dbdata
    ports:
    - "13306:3306"
    volumes:
    - ./sql:/docker-entrypoint-initdb.d
    volumes_from:
    - apollo-dbdata
    extra_hosts:
    - host.docker.internal:host-gateway


    apollo-dbdata:
    image: alpine:latest
    container_name: apollo-dbdata
    volumes:
    - /var/lib/mysql
    extra_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:51
              apollo-db | 2022-10-31T14:45:51.731010Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
              apollo-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.log
              apollo-db | 2022-10-31T14:45:51.817694Z 0 [Note] Event Scheduler: Loaded 0 events
              apollo-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 started
              apollo-quick-start | ==== starting portal ====
              apollo-quick-start | Portal logging file is ./portal/apollo-portal.log
              apollo-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 packets
              apollo-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  start
                JAVA_OPTS = -Xms100m -Xmx1000m -Xmn100m -Xss256k -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=250m
                ==== starting service ====
                Service logging file is ./service/apollo-service.log
                Application is running as root (UID 0). This is considered insecure.
                Started [494]
                Waiting for config service startup
                Config service started. You may visit http://host.docker.internal:8080 for service status now!
                Waiting for admin service startup
                Admin service started
                ==== starting portal ====
                Portal logging file is ./portal/apollo-portal.log
                Application is running as root (UID 0). This is considered insecure.
                Started [538]
                Waiting for portal startup
                Portal 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 client
                  JAVA_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.DefaultMetaServerProvider
                  Apollo Config Demo. Please input key to get the value. Input quit to exit.
                  >
                    > timeout
                    Loading key : timeout with value: 100

                    切换到sampleApp发送一个配置,可以看到客户端收到变化了

                      > Changes for namespace application
                      Change - key: 12131, oldValue: null, newValue: 12131, changeType: ADDED

                      demo.sh内容如下

                        #!/bin/bash


                        # handle env
                        if [[ -n "$JAVA_OPTS" ]]; then
                        echo JAVA_OPTS = $JAVA_OPTS
                        fi


                        if [[ -n "$APOLLO_CONFIG_DB_USERNAME" ]]; then
                        echo APOLLO_CONFIG_DB_USERNAME = "$APOLLO_CONFIG_DB_USERNAME"
                        fi


                        if [[ -n "$APOLLO_CONFIG_DB_PASSWORD" ]]; then
                        echo APOLLO_CONFIG_DB_PASSWORD = "${APOLLO_CONFIG_DB_PASSWORD//?/*}"
                        fi


                        if [[ -n "$APOLLO_PORTAL_DB_USERNAME" ]]; then
                        echo APOLLO_PORTAL_DB_USERNAME = "$APOLLO_PORTAL_DB_USERNAME"
                        fi


                        if [[ -n "$APOLLO_PORTAL_DB_PASSWORD" ]]; then
                        echo APOLLO_PORTAL_DB_PASSWORD = "${APOLLO_PORTAL_DB_PASSWORD//?/*}"
                        fi


                        # apollo config db info
                        apollo_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 info
                        apollo_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" ]; then
                        windows="0"
                        elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
                        windows="0"
                        elif [ "$(expr substr $(uname -s) 1 5)" == "MINGW" ]; then
                        windows="1"
                        else
                        windows="0"
                        fi


                        # meta server url
                        #host=docker.for.mac.host.internal
                        # host=localhost
                        host=host.docker.internal


                        config_server_url=http://${host}:8080
                        admin_server_url=http://${host}:8090
                        eureka_service_url=$config_server_url/eureka/
                        portal_url=http://${host}:8070


                        # JAVA OPTS
                        BASE_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"


                        # executable
                        JAR_FILE=apollo-all-in-one.jar
                        SERVICE_DIR=./service
                        SERVICE_JAR_NAME=apollo-service.jar
                        SERVICE_JAR=$SERVICE_DIR/$SERVICE_JAR_NAME
                        SERVICE_LOG=$SERVICE_DIR/apollo-service.log
                        PORTAL_DIR=./portal
                        PORTAL_JAR_NAME=apollo-portal.jar
                        PORTAL_JAR=$PORTAL_DIR/$PORTAL_JAR_NAME
                        PORTAL_LOG=$PORTAL_DIR/apollo-portal.log
                        CLIENT_DIR=./client
                        CLIENT_JAR=$CLIENT_DIR/apollo-demo.jar


                        # go to script directory
                        cd "${0%/*}"


                        function checkJava {
                        if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then
                        if [ "$windows" == "1" ]; then
                        tmp_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=java
                        else
                        echo "Could not find java executable, please check PATH and JAVA_HOME variables."
                        exit 1
                        fi


                        if [[ "$_java" ]]; then
                        version=$("$_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 ]]; then
                        echo "Java version is $version, please make sure java 1.8+ is in the path"
                        exit 1
                        fi
                        fi
                        }


                        function checkServerAlive {
                        declare -i counter=0
                        declare -i max_counter=24 # 24*5=120s
                        declare -i total_time=0


                        SERVER_URL="$1"


                        until [[ (( counter -ge max_counter )) || "$(curl -X GET --silent --connect-timeout 1 --max-time 2 --head $SERVER_URL | grep "HTTP")" != "" ]];
                        do
                        printf "."
                        counter+=1
                        sleep 5
                        done


                        total_time=counter*5


                        if [[ (( counter -ge max_counter )) ]];
                        then
                        return $total_time
                        fi


                        return 0
                        }


                        checkJava


                        if [ "$1" = "start" ] ; then
                        echo "==== 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 ]]; then
                        rm -rf $SERVICE_JAR
                        fi


                        ln $JAR_FILE $SERVICE_JAR
                        chmod a+x $SERVICE_JAR


                        $SERVICE_JAR start --configservice --adminservice


                        rc=$?
                        if [[ $rc != 0 ]];
                        then
                        echo "Failed to start service, return code: $rc. Please check $SERVICE_LOG for more information."
                        exit $rc;
                        fi


                        printf "Waiting for config service startup"
                        checkServerAlive $config_server_url


                        rc=$?
                        if [[ $rc != 0 ]];
                        then
                        printf "\nConfig service failed to start in $rc seconds! Please check $SERVICE_LOG for more information.\n"
                        exit 1;
                        fi


                        printf "\nConfig service started. You may visit $config_server_url for service status now!\n"


                        printf "Waiting for admin service startup"
                        checkServerAlive $admin_server_url


                        rc=$?
                        if [[ $rc != 0 ]];
                        then
                        printf "\nAdmin service failed to start in $rc seconds! Please check $SERVICE_LOG for more information.\n"
                        exit 1;
                        fi


                        printf "\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 ]]; then
                        rm -rf $PORTAL_JAR
                        fi


                        ln $JAR_FILE $PORTAL_JAR
                        chmod a+x $PORTAL_JAR


                        $PORTAL_JAR start --portal


                        rc=$?
                        if [[ $rc != 0 ]];
                        then
                        echo "Failed to start portal, return code: $rc. Please check $PORTAL_LOG for more information."
                        exit $rc;
                        fi


                        printf "Waiting for portal startup"
                        checkServerAlive $portal_url


                        rc=$?
                        if [[ $rc != 0 ]];
                        then
                        printf "\nPortal failed to start in $rc seconds! Please check $PORTAL_LOG for more information.\n"
                        exit 1;
                        fi


                        printf "\nPortal started. You can visit $portal_url now!\n"


                        tail -f dev/null
                        elif [ "$1" = "client" ] ; then
                        if [ "$windows" == "1" ]; then
                        java -classpath "$CLIENT_DIR;$CLIENT_JAR" $CLIENT_JAVA_OPTS com.ctrip.framework.apollo.demo.api.SimpleApolloConfigDemo
                        else
                        java -classpath $CLIENT_DIR:$CLIENT_JAR $CLIENT_JAVA_OPTS com.ctrip.framework.apollo.demo.api.SimpleApolloConfigDemo
                        fi


                        elif [ "$1" = "stop" ] ; then
                        echo "==== stopping portal ===="
                        export APP_NAME="apollo-portal"
                        cd $PORTAL_DIR
                        ./$PORTAL_JAR_NAME stop


                        cd ..


                        echo "==== stopping service ===="
                        export APP_NAME="apollo-service"
                        cd $SERVICE_DIR
                        ./$SERVICE_JAR_NAME stop


                        else
                        echo "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 1
                        fi


                        定义一个golang应用,namespace也取名字叫golang

                        定义一个应用密钥

                        启动我们的golang客户端尝试读取下

                          package main


                          import (
                          "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 test
                          cache := client.GetConfigCache(c.NamespaceName)
                          value, _ := cache.Get("conf")
                          fmt.Println(value)
                          }
                             % go run learn/apollo/client.go
                            初始化Apollo配置成功
                            conf

                            接着测试下watch功能

                              package main


                              import (
                              "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 here
                              fmt.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.go
                                err: <nil>
                                map[conf:0xc00018a300]
                                change key : conf , value : &{conf conf1 1}
                                golang

                                文章转载自golang算法架构leetcode技术php,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                评论