安装文档:https://mrbird.cc/Spring-Cloud-Alibaba-Nacos%E6%B3%A8%E5%86%8C%E4%B8%AD%E5%BF%83.html
docker-compose安装nacos
创建文件夹:/opt/docker-file/nacos
version: "3"
services:nacos:image: nacos/nacos-server:v2.1.0container_name: nacosenvironment:# 支持主机名可以使用hostname,否则使用ip,默认ip- PREFER_HOST_MODE=ip# 单机模式- MODE=standalone# 数据源平台 支持mysql或不保存empty- SPRING_DATASOURCE_PLATFORM=mysql# mysql配置,!!!attention必须是mysql所在主机IP#- MYSQL_SERVICE_HOST=192.168.0.123#- MYSQL_SERVICE_PORT=3306#- MYSQL_SERVICE_USER=root#- MYSQL_SERVICE_PASSWORD=123456#- MYSQL_SERVICE_DB_NAME=nacosvolumes:- ./logs:/home/nacos/logs- ./conf:/home/nacos/confports:- 8848:8848 restart: always
创建log日志目录及配置文件目录:
mkdir -p /opt/docker-file/nacos/logs
mkdir -p /opt/docker-file/nacos/conf
将application.properties文件复制到/opt/docker-file/nacos/conf目录下
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
# 数据库数量
db.num=1
db.url.0=jdbc:mysql://192.168.229.199:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root2
db.password=123456
/** Copyright 1999-2018 Alibaba Group Holding Ltd.** 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.*//******************************************/
/* 数据库全名 = 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(50) 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,`encrypted_data_key` TEXT NOT NULL COMMENT '秘钥',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(50) DEFAULT NULL COMMENT 'source ip',`tenant_id` VARCHAR(128) DEFAULT '' COMMENT '租户字段',`encrypted_data_key` TEXT NOT NULL 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(50) 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(50) DEFAULT NULL,`op_type` CHAR(10) DEFAULT NULL,`tenant_id` VARCHAR(128) DEFAULT '' COMMENT '租户字段',`encrypted_data_key` TEXT NOT NULL 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(255) 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');
[root@localhost nacos]# docker-compose up -d
[+] Running 1/1⠿ Container nacos Started
docker logs -f nacos
需要在conf目录准备log文件:nacos-logback.xml
logback ERROR %d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n ${log.path} ${log.path}.%d{yyyy-MM-dd}.zip %date %level [%thread] %logger{36} [%file : %line] %msg%n
继续查看nacos错误日志
如连接不上数据库,就是数据库账号密码没有配对。
地址:192.168.229.199:49155/nacos/#/login
账号:nacos
密码:nacos
打包成新的镜像放在本地仓库,下次可以直接用
nacos与springcloud与springcloudalibaba版本对照
nacos版本:v2.1.0
springboot版本:
org.springframework.boot spring-boot-starter-parent 2.1.8.RELEASE
springcloudalibaba与springcloud版本:
1.8 Greenwich.RELEASE 2.1.0.RELEASE
父:spring-cloud-alibaba-nacos-register
子:consumer,provider
spring-cloud-alibaba-nacos-register
4.0.0 cc.mrbird spring-cloud-alibaba-nacos-register 1.0-SNAPSHOT pom provider consumer org.springframework.boot spring-boot-starter-parent 2.1.8.RELEASE 1.8 Greenwich.RELEASE 2.1.0.RELEASE org.springframework.boot spring-boot-starter-web com.alibaba.cloud spring-cloud-alibaba-nacos-discovery org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import com.alibaba.cloud spring-cloud-alibaba-dependencies ${com-alibaba-cloud.version} pom import
provider
4.0.0 cc.mrbird spring-cloud-alibaba-nacos-register 1.0-SNAPSHOT ../pom.xml provider provider 服务提供端 org.springframework.boot spring-boot-maven-plugin
consumer
4.0.0 cc.mrbird spring-cloud-alibaba-nacos-register 1.0-SNAPSHOT ../pom.xml consumer consumer 服务消费端 org.springframework.boot spring-boot-maven-plugin
provider
server.port=8001
spring.application.name=nacos-producer
spring.cloud.nacos.discovery.server-addr=192.168.229.199:8848
management.endpoints.web.exposure.include=*
comsumer
server.port=8002
spring.application.name=nacos-consumer
spring.cloud.nacos.discovery.server-addr=192.168.229.199:8848
management.endpoints.web.exposure.include=*
启动类加注解@EnableDiscoveryClient
provider
package cc.mrbird.provider.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("provide")
public class HelloController {@GetMapping("{message}")public String hello(@PathVariable String message) {return String.format("hello %s", message);}
}
consumer
package cc.mrbird.consumer.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
@RequestMapping("consume")
public class ConsumeController {@Autowiredprivate LoadBalancerClient loadBalancerClient;@Autowiredprivate RestTemplate restTemplate;@GetMapping("hello/{message}")public String hello(@PathVariable String message) {ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-producer");String path = String.format("http://%s:%s/provide/%s", serviceInstance.getHost(), serviceInstance.getPort(), message);String result = restTemplate.getForObject(path, String.class);return String.format("%s from %s %s", result, serviceInstance.getHost(), serviceInstance.getPort());}}
consumer
package cc.mrbird.consumer.configure;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class ConsumerConfigure {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
http://192.168.229.199:8848/nacos/#/serviceManagement
如图:
服务提供者:localhost:8001/provide/nacos
服务消费者:localhost:8002/consume/hello/nacos
启动两个provider:
localhost:8001/provide/nacos
localhost:8009/provide/nacos
java项目如果启动了配置中心,在项目不重启的情况下,可以远程动态的修改配置信息
在spring-cloud-alibaba-nacos-register项目下新建子项目config
spring-cloud-alibaba-nacos-register cc.mrbird 1.0-SNAPSHOT ../pom.xml 4.0.0 config 配置服务 com.alibaba.cloud spring-cloud-alibaba-nacos-config org.springframework.boot spring-boot-maven-plugin
必须是bootstrap.properties文件,不然加载不到
server.port=8102
spring.cloud.nacos.config.server-addr=192.168.229.199:8848
#spring.cloud.nacos.config.file-extension=properties
spring.application.name=nacos-config-examplespring.cloud.nacos.discovery.server-addr=192.168.229.199:8848
management.endpoints.web.exposure.include=*
package cc.mrbird.config;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication
@EnableConfigurationProperties
public class ConfigApplication {public static void main(String[] args) {SpringApplication.run(ConfigApplication.class, args);}
}
package cc.mrbird.config.controller;import cc.mrbird.config.config.UserConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("config")
public class Controller {@Autowiredprivate UserConfig userConfig;@GetMapping("hello/{message}")public String sayHello(@PathVariable String message) {return this.userConfig.getUsername() + message + ";" + this.userConfig.getAge();}}
package cc.mrbird.config.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;@ConfigurationProperties(prefix = "user")
//@Component
@Configuration
@Data
public class UserConfig {private String username;private int age;
}
注意dataId的命名方式
没有报错,说明配置没有问题
localhost:8102/config/hello/nacos
修改nacos服务端配置后再次访问:成功
注释web依赖
org.springframework.cloud spring-cloud-starter-gateway org.springframework.boot spring-boot-starter-web
spring:gateway:routes:- id: gateway-test # 访问http://localhost:8801/gateway-test/test/index,会跳转到访问到 http://localhost:8802/gateway-test/test/index地址uri: lb://gateway-testorder: 0predicates:- Path=/gateway-test/**filters:- StripPrefix=1management:endpoints:web:exposure:include: '*'
上一篇:【Java进阶篇】第六章 IO流