Spring Cloud Alibaba Dubbo 实践 + Docker编排

(转载请注明来源:cnblogs coder-fang)

本实例包括Nacos服务发现,配置中心,sentinel 容断简单使用,Spring cloud alibaba 的dubbo实例及所有服务的docker部署。

  • 创建三个Maven独立工程,接口API,provier,consumer

    •   DemoAPI提供服务的通用接口,创建为普通Maven项目,接口打包到中心仓库供其它工程使用,POM文件如下:
      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
      
          <groupId>spcloud-dubbo</groupId>
          <artifactId>demo-api</artifactId>
          <version>1.0</version>
          <!-- 发布到仓库 -->
          <distributionManagement>
              <repository>
                  <id>nexus-releases</id>
                  <name>Nexus Release Repository</name>
                  <url>http://nexusserver:6060/nexus/content/repositories/releases/</url>
              </repository>
              <snapshotRepository>
                  <id>nexus-snapshots</id>
                  <name>Nexus Snapshot Repository</name>
                  <url>http://nexusserver:6060/nexus/content/repositories/snapshots/</url>
              </snapshotRepository>
          </distributionManagement>
      
      </project>
      View Code
    •   Demo代码,只提供一个测试接口
      package  spcloud.demoapi;
      public interface IApiService {
          String Hello(String name);
      }

       

    •     创建Provider工程(Spring boot 项目),POM文件如下:
      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.2.7.RELEASE</version>
              <relativePath/> <!-- lookup parent from repository -->
          </parent>
          <groupId>com.spcouddubbo.demo</groupId>
          <artifactId>provider</artifactId>
          <version>1.0</version>
          <name>provider</name>
          <description>Demo project for Spring Boot</description>
      
          <properties>
              <java.version>1.8</java.version>
              <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>spcloud-dubbo</groupId>
                  <artifactId>demo-api</artifactId>
                  <version>1.0</version>
              </dependency>
      
      
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
              </dependency>
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
              </dependency>
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-dubbo</artifactId>
              </dependency>
      
      
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
                  <scope>test</scope>
                  <exclusions>
                      <exclusion>
                          <groupId>org.junit.vintage</groupId>
                          <artifactId>junit-vintage-engine</artifactId>
                      </exclusion>
                  </exclusions>
              </dependency>
          </dependencies>
      
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>com.alibaba.cloud</groupId>
                      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                      <version>${spring-cloud-alibaba.version}</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      
      </project>
      View Code

       

    •     配置文件与代码如下:
      •   Bootstrap.yaml 
        spring:
          application:
            name: provider
          main:
            allow-bean-definition-overriding: true
          cloud:
            nacos:
              discovery:
                enabled: true
                register-enabled: true
                server-addr: nacosserver:8848
              config:
                server-addr: nacosserver:8848
        View Code

         

      •   Application.yaml 
        dubbo:
          scan:
            base-packages: com.spcouddubbo.demo.provider
          protocols:
            dubbo:
              name: dubbo
              port: -1
          cloud:
            subscribed-services:
        demo:
          user: nouser
        View Code

         

      •   接口实现类(此类会使用demo.user的配置,如果无法获取配置中心数据,则使用本地配置)
        package com.spcouddubbo.demo.provider;
        
        import com.alibaba.nacos.api.config.annotation.NacosValue;
        import org.apache.dubbo.config.annotation.Service;
        import org.springframework.beans.factory.annotation.Value;
        import org.springframework.cloud.client.loadbalancer.LoadBalanced;
        import org.springframework.cloud.context.config.annotation.RefreshScope;
        import spcloud.demoapi.IApiService;
        @Service
        @RefreshScope
        
        public class APIImplment implements IApiService {
        
            @Value("${demo.user}")
            String user;
        
            @Override
            public String Hello(String s) {
                return "hello 1 "+s+" "+user;
            }
        }
        View Code

         

      •   在 ProviderApplication 类上加入注解:@EnableDiscoveryClient
      •   执行 mvn package 打包,生成  provider-1.0.jar

 

    •     创建Consumer工程(Spring boot WEB项目),POM文件如下:
      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.2.7.RELEASE</version>
              <relativePath/> <!-- lookup parent from repository -->
          </parent>
          <groupId>com.spclouddubbo.demo</groupId>
          <artifactId>consumer</artifactId>
          <version>1.0</version>
          <name>consumer</name>
          <description>Demo project for Spring Boot</description>
      
          <properties>
              <java.version>1.8</java.version>
              <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
              </dependency>
      
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
              </dependency>
      
              <dependency>
                  <groupId>spcloud-dubbo</groupId>
                  <artifactId>demo-api</artifactId>
                  <version>1.0</version>
              </dependency>
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-dubbo</artifactId>
              </dependency>
      
      
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-test</artifactId>
                  <scope>test</scope>
                  <exclusions>
                      <exclusion>
                          <groupId>org.junit.vintage</groupId>
                          <artifactId>junit-vintage-engine</artifactId>
                      </exclusion>
                  </exclusions>
              </dependency>
          </dependencies>
      
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>com.alibaba.cloud</groupId>
                      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                      <version>${spring-cloud-alibaba.version}</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      
      </project>
      View Code

       

    •     配置与代码如下:
      •   Bootstrap.yaml  
        spring:
          application:
            name: comsumer
          main:
            allow-bean-definition-overriding: true
          cloud:
            nacos:
              discovery:
                enabled: true
                register-enabled: true
                server-addr: nacosserver:8848
              config:
                server-addr: nacosserver:8848
        View Code

         

         

      •   Application.yaml 
        dubbo:
          cloud:
            subscribed-services: provider
          consumer:
            check: false

         

      •   主要代码如下:
        package com.spclouddubbo.demo.consumer;
        
        import com.alibaba.csp.sentinel.annotation.SentinelResource;
        import com.alibaba.csp.sentinel.slots.block.BlockException;
        import org.apache.dubbo.config.annotation.Reference;
        import org.apache.dubbo.rpc.RpcException;
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
        import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
        import org.springframework.web.bind.annotation.*;
        import spcloud.demoapi.IApiService;
        
        @SpringBootApplication
        @RestController
        @EnableDiscoveryClient
        public class ConsumerApplication {
        
            public static void main(String[] args) {
                SpringApplication.run(ConsumerApplication.class, args);
            }
        
            @Reference
            IApiService service;
        
            @ResponseBody
            @GetMapping("/")
            @SentinelResource(fallbackClass = ProviderError.class,defaultFallback = "errorService")
            public String Getname( String name)
            {
                return  service.Hello(name);
            }
            
        }
        View Code

         

      •   服务失效回调代码:
        package com.spclouddubbo.demo.consumer;
        
        public class ProviderError {
            public  static   String errorService() {
                return "Call Provider services error";
            }
        }

         

      •   执行 mvn package 打包,生成consumer-1.0.jar

 

  • 服务部署(以单主机为例,分别在两个目录中进行Nacos与应用服务的部署):

    •  创建桥接网络  docker network create -d bridge localnet
    •  部署nacos服务:
      •   docker 下拉 mysql:5.6, nacos/nacos-server
      •   目录结构如图:
      •   Docker-compose.yml 
        version: "3.1"
        services:
          db:
            image: mysql:5.6
            restart: always
            container_name: nacosdb
            hostname: nacosdb    
            volumes:
              - ./mysql:/var/lib/mysql     
            networks:
              - localnet
          nacos:
            image: nacos/nacos-server
            container_name: nacos-standalone-mysql
            hostname: nacoshost
            env_file:
              - ./mysql.env
            volumes:
              - ./logs/:/home/nacos/logs   
              - ./custom.properties:/home/nacos/init.d/custom.properties
            ports:
              - "8848:8848"
              - "9555:9555"
            restart: "no"
            depends_on:
              - db
            networks:
              - localnet
            links:
              - db
        networks:
          localnet:
            external: true       
        View Code

         

      • mysql.env

        MYSQL_SERVICE_DB_NAME=nacos
        MYSQL_SERVICE_USER=nacos
        MYSQL_SERVICE_PASSWORD=nacos
        MYSQL_SERVICE_PORT=3306
        MYSQL_SERVICE_HOST=db
        MODE=standalone
        View Code

         

      • custom.properties 根据需求自行配置

        #spring.security.enabled=false
        #management.security=false
        #security.basic.enabled=false
        #nacos.security.ignore.urls=/**
        #management.metrics.export.elastic.host=http://localhost:9200
        # metrics for prometheus
        management.endpoints.web.exposure.include=*
        
        # metrics for elastic search
        #management.metrics.export.elastic.enabled=false
        #management.metrics.export.elastic.host=http://localhost:9200
        
        # metrics for influx
        #management.metrics.export.influx.enabled=false
        #management.metrics.export.influx.db=springboot
        #management.metrics.export.influx.uri=http://localhost:8086
        #management.metrics.export.influx.auto-create-db=true
        #management.metrics.export.influx.consistency=one
        #management.metrics.export.influx.compressed=true
        View Code

         

         

      •   可先启动mysql 进行用户nacos创建与脚本初始化,脚本代码 Git链接

        /******************************************/
        /*   数据库全名 = nacos_config   */
        /*   表名称 = config_info   */
        /******************************************/
        CREATE TABLE `config_info` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(255) DEFAULT NULL,
          `content` longtext NOT NULL COMMENT 'content',
          `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
          `src_user` text COMMENT 'source user',
          `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
          `app_name` varchar(128) DEFAULT NULL,
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
          `c_desc` varchar(256) DEFAULT NULL,
          `c_use` varchar(64) DEFAULT NULL,
          `effect` varchar(64) DEFAULT NULL,
          `type` varchar(64) DEFAULT NULL,
          `c_schema` text,
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
        
        /******************************************/
        /*   数据库全名 = nacos_config   */
        /*   表名称 = config_info_aggr   */
        /******************************************/
        CREATE TABLE `config_info_aggr` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(255) NOT NULL COMMENT 'group_id',
          `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
          `content` longtext NOT NULL COMMENT '内容',
          `gmt_modified` datetime NOT NULL COMMENT '修改时间',
          `app_name` varchar(128) DEFAULT NULL,
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
        
        
        /******************************************/
        /*   数据库全名 = nacos_config   */
        /*   表名称 = config_info_beta   */
        /******************************************/
        CREATE TABLE `config_info_beta` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(128) NOT NULL COMMENT 'group_id',
          `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
          `content` longtext NOT NULL COMMENT 'content',
          `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
          `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
          `src_user` text COMMENT 'source user',
          `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
        
        /******************************************/
        /*   数据库全名 = nacos_config   */
        /*   表名称 = config_info_tag   */
        /******************************************/
        CREATE TABLE `config_info_tag` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(128) NOT NULL COMMENT 'group_id',
          `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
          `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
          `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
          `content` longtext NOT NULL COMMENT 'content',
          `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
          `src_user` text COMMENT 'source user',
          `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
        
        /******************************************/
        /*   数据库全名 = nacos_config   */
        /*   表名称 = config_tags_relation   */
        /******************************************/
        CREATE TABLE `config_tags_relation` (
          `id` bigint(20) NOT NULL COMMENT 'id',
          `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
          `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
          `data_id` varchar(255) NOT NULL COMMENT 'data_id',
          `group_id` varchar(128) NOT NULL COMMENT 'group_id',
          `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
          `nid` bigint(20) NOT NULL AUTO_INCREMENT,
          PRIMARY KEY (`nid`),
          UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
          KEY `idx_tenant_id` (`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
        
        /******************************************/
        /*   数据库全名 = nacos_config   */
        /*   表名称 = group_capacity   */
        /******************************************/
        CREATE TABLE `group_capacity` (
          `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
          `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
          `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
          `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
          `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
          `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
          `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
          `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_group_id` (`group_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
        
        /******************************************/
        /*   数据库全名 = nacos_config   */
        /*   表名称 = his_config_info   */
        /******************************************/
        CREATE TABLE `his_config_info` (
          `id` bigint(64) unsigned NOT NULL,
          `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
          `data_id` varchar(255) NOT NULL,
          `group_id` varchar(128) NOT NULL,
          `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
          `content` longtext NOT NULL,
          `md5` varchar(32) DEFAULT NULL,
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
          `src_user` text,
          `src_ip` varchar(20) DEFAULT NULL,
          `op_type` char(10) DEFAULT NULL,
          `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
          PRIMARY KEY (`nid`),
          KEY `idx_gmt_create` (`gmt_create`),
          KEY `idx_gmt_modified` (`gmt_modified`),
          KEY `idx_did` (`data_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
        
        
        /******************************************/
        /*   数据库全名 = nacos_config   */
        /*   表名称 = tenant_capacity   */
        /******************************************/
        CREATE TABLE `tenant_capacity` (
          `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
          `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
          `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
          `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
          `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
          `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
          `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
          `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
          `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
          `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_tenant_id` (`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
        
        
        CREATE TABLE `tenant_info` (
          `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
          `kp` varchar(128) NOT NULL COMMENT 'kp',
          `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
          `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
          `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
          `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
          `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
          `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
          PRIMARY KEY (`id`),
          UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
          KEY `idx_tenant_id` (`tenant_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
        
        CREATE TABLE `users` (
            `username` varchar(50) NOT NULL PRIMARY KEY,
            `password` varchar(500) NOT NULL,
            `enabled` boolean NOT NULL
        );
        
        CREATE TABLE `roles` (
            `username` varchar(50) NOT NULL,
            `role` varchar(50) NOT NULL,
            UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
        );
        
        CREATE TABLE `permissions` (
            `role` varchar(50) NOT NULL,
            `resource` varchar(512) NOT NULL,
            `action` varchar(8) NOT NULL,
            UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
        );
        
        INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
        
        INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
        View Code
      • 在此目录中运行命令docker-compose up ,Nacos服务启动。

    •  创建应用服务

      •   创建应用目录并将生成的provider与consumer的jar包拷贝过来:

      • 根据dcokerfile 生成各自服务镜像,Dockerfile-provider 文件:

        FROM openjdk:8
        COPY . /usr/src/myapp
        WORKDIR /usr/src/myapp
        CMD ["java", "-jar","provider-1.0.jar"]

         

      • Dockerfile-consumer文件:

        FROM openjdk:8
        COPY . /usr/src/myapp
        WORKDIR /usr/src/myapp
        CMD ["java", "-jar","consumer-1.0.jar"]

         

      • 创建镜像: docker build . -t provider -f .\Dockerfile-provider  ,docker build . -t provider -f .\Dockerfile-consumer

      •  

        此目录Docker-compose.yml:

        version: "3.1"
        services:
          dubbo-provider:
            image: provider
            container_name: provider 
            hostname: provider    
            restart: "no"
            networks:
              - localnet
            external_links:
              - nacos-standalone-mysql:nacosserver
          dubbo-custom:
            image: consumer
            container_name: consumer
            hostname: consumer
            restart: "no"
            ports:
              - 8080:8080
            networks:
              - localnet
            external_links:
              - nacos-standalone-mysql:nacoserver
            depends_on:
             - dubbo-provider
        networks:
          localnet:
            external: true       
        View Code
      • 在此目录中运行 docker-compose up  启动应用服务

 

          

 

  • 服务验证:

    • 服务正常情况如图:

    •  

    • Nacos网页查看已注册服务

    • 运行测试 http://nacosserver:8080/?name=abc

      •   配置中心未配置时输出:

         

         

      •   在配置中心进行配置:

      •  

         

                      再次刷新网址此时输出 :

         

         

         

         

      •   关闭provider服务,刷新网址输出 :

         

         

    • 至此整个过程已跑通,以此做为笔记,为以后快速创建项目提供参考


       

      

 

posted @ 2020-06-11 10:31  Coder_fang  阅读(815)  评论(0编辑  收藏  举报