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服務,刷新網址輸出 :

         

         

    • 至此整個過程已跑通,以此做為筆記,為以后快速創建項目提供參考


       

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM