SpringCloud Nacos

1.Nacos简介

SpringCloud Alibaba 由来: 因为原先Spring Cloud 的许多组件都是对Netflix 公司的各种框架进行封装, 然后因为Netflix公司对后续更新的各种跳票,甚至停更, 导致 Spring Cloud也受到巨大影响,
于此同时,由Alibaba 开发的 微服务框架, nacos, sentinel 等在此时蓬勃发展,并趋于稳定,
于是SpringCloud 将其纳入,组建新的子项目, SpringCloud Alibaba ,提供全新的微服务整体解决方案

Nacos,全称Dynamic Naming and Configuration Service,主要提供 注册中心和配置中心的工作, 替代原先Eureka 和 Config配置中心, 一体多用,并自带了明了的可视化界面,使开发运维工作更加简单

安装运行

下载地址:https://github.com/alibaba/nacos/tags

官方文档:https://nacos.io/zh-cn/docs/quick-start.html

下载对应操作系统版本的压缩包,解压后执行对应的脚本即可

如下Linux, 默认启动方式为集群,所以可以手动指定启动方式为单机

startup.sh -m standalone

启动成功,访问地址,端口默8848:http://127.0.0.1:8848/nacos

会进入登录页面, 数据默认的账号密码nacos/nacos

即可进入后台页面

image-20210224172813906

2. Nacos注册中心入门

2.1:服务提供方搭建

pom依赖:

  <dependencies>
        <!--  SpringCloud alibaba nacos    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--  web组件      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

yaml配置:

server:
  port: 9001
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.100.44:8848 #指定nacos地址

启动类:

@SpringBootApplication
@EnableDiscoveryClient // 代表此服务注册到注册中心,在Edgware版本后,可以不写
public class PaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class, args);
    }
}

测试controller,返回传入的ID号和本服务的端口

@RestController
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id) {
        return "nacos registry, serverPort: " + serverPort + "\t id" + id;
    }

}

启动项目, 查看Nacos后台控制中心

image-20210225164711043

可以看出,此服务已经成功注册到nacos中

使用浏览器测试此服务是否可以正常提供服务:http://127.0.0.1:9001/payment/nacos/10

打印信息:nacos registry, serverPort: 9001 id10

2.3 服务消费方搭建

pom依赖和提供方一致

yaml配置:

server:
  port: 83
spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.100.174:8848
service-url:
  nacos-user-service: http://nacos-payment-provider

启动类:

@SpringBootApplication
public class OrderNacosMain83 {
    public static void main(String[] args) {
        SpringApplication.run(OrderNacosMain83.class, args);
    }
}

如果本服务只用做消费,不做任何服务提供,那么只需获取服务即可,不用将自身注册到注册中心,可以添加如下配置

yaml文件中配置: spring.cloud.nacos.discovery.register-enabled=false

或者启动类中添加注解: @EnableDiscoveryClient(autoRegister = false)

即可禁用注册

RestTemplate配置:

@Configuration
public class ApplicationContextConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}

测试controller

@RestController
public class OrderNacosController {


    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @GetMapping("/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id) {
        return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);
    }
}

启动项目,查看nacos后台,发现消费方也注册了进来(本例注册)

image-20210225174428207

调用消费方测试接口:http://127.0.0.1:83/consumer/payment/nacos/10

打印结果:nacos registry, serverPort: 9001 id10

说明消费方成功调用了服务提供方

注: nacos的依赖中自带了 Ribbon依赖,所以如果服务提供方若有多个,也可以进行负载均衡,同样适用Feign也是同理

3. Nacos config服务

在上面说到,nacos本身还提供了配置中心的功能,下面进行简单的演示入门

pom依赖:

    <dependencies>
        <!--   nacos config     -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--  SpringCloud alibaba nacos    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--  web组件      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

bootstrap.yml:

server:
    port: 3377
spring:
    application:
        name: nacos-config-client
    cloud:
        nacos:
            discovery:
                server-addr: 192.168.100.174:8848 # 注册到nacos中
            config:
                server-addr: 192.168.100.174:8848 #配置中心的地址
                file-extension: yml #后缀名
    profiles:
     active: dev

因为和SpringCloud-config 一样,在项目启动前,就需要从配置中心拉取信息,所以需要提前知道一些信息,这些信息可以配置在bootstrap.yml文件中

启动类

@SpringBootApplication
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}

测试controller类

@RestController
@RefreshScope //当配置中心的文件修改时,自动刷新
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo(){
        return configInfo;
    }
}

在nacos控制台中新增配置文件
在nacos中,文件的dataId的格式如下:

${prefix}-${spring.profile.active}.${file-extension}

根据官网文档:

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.$
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

所以本例的格式为:

${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

即:nacos-config-client-dev.yml

如图新增配置文件:

image-20210226150731152

可以使用此链接进行直接获取测试:http://192.168.100.174:8848/nacos/v1/cs/configs?dataId=nacos-config-client-dev.yml&group=DEFAULT_GROUP,将dataId修改即可

若获取不到新增的配置的信息,可以尝试启动nacos服务

测试

启动服务, 调用测试接口:http://127.0.0.1:3377/config/info

打印信息:nacos config

说明项目启动时,成功获取到了nacos中配置的信息

修改此配置文件信息,服务自动刷新,重新获取后为修改后的数据,测试成功

4. 领域模型

若配置文件过多,或者环境较多,那么在处理各个服务的各个环境的配置关系时,将变的很复杂,所以 Nacos 为我们提供了领域模式进行解决

(Namespace/Group/DataId)

如下结构概念图:

image-20210226154625758

NameSpace
Nacos提供的粗粒度的,可以进行完全资源隔离的 命令空间, 比如说定义三个命名空间, 开发,测试,生产,我们就可以创建三个NameSpace,不同的NameSpace是完全隔离的, 服务之间也不可相互感应

image-20210226155211728
如上图所示, Nacos默认的NameSpace为 public,不可以删除,也可以新增自己的NameSpace

Group
我们可以将同一个NameSpace 下同类型的微服务纳入到同一个组,配置文件也可以分组,默认为DEFAULT_GROUP

image-20210226155444997

image-20210226155458740

如上两图所示, 服务注册和配置文件,都为默认分组

Service/DataId

对于微服务而言就是 Service, 对于配置文件就是DataId,具体的实例(Service还可以有集群)

image-20210226161737968

如上图示例所示:

  • NameSpace为Dev,环境为开发环境
  • 订单服务和支付服务归纳为交易分组,库存和物流归纳为仓储分组
  • 对于每个微服务实例,又有其不同的集群, 如图所示, 分为北京的集群和南京的集群

5.Nacos 集群

5.1 集成Mysql

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,

所以为了集群数据Nacos服务的数据上限问题,和便于各个节点之间的数据互通, 需要将数据库切换为Mysql

具体的操作步骤:

  • 1.安装数据库,版本要求:5.6.5+
  • 2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
  • 3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

applicatio.properties中加入如下配置(修改ip,数据库名,用户名密码):

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

数据库初始化脚本:

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(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');

重新启动Nacos服务, 可以查看后台日志, logs/nacos.log ,有打印INFO Use MySql as the driver ,

启动成功后,重新访问管理页面,发现之前录入的 配置文件都不在了,说明数据源成功切换为Mysql,不再使用内置数据源

5.2 集群搭建

官网集群架构图:

image-20210227134451381

推荐架构如下:

image-20210227141105636

  • 一个nginx服务(高可用)
  • 三个或以上Nacos 服务集群
  • 高可用Mysql集群

下面模拟搭建

  • 首先将Nacos准备好的例子conf/cluster.conf.example 复制到当前目录,并命令为cluster.conf, 修改内容为

    192.168.100.174:8849
    192.168.100.174:8850
    192.168.100.174:8851
    

    代表着包括自己在内的三个服务的地址,本例使用同一台服务器,用不同的端口区分不同Nacos服务(不能使用127.0.0.1)

  • 将本服务启动三次,并依次修改application.properties中的端口

    server.port=8848 #修改端口
    

    或者可以修改启动的脚本start.sh,启动时携带端口启动:

    接受参数:

    image-20210227145514111

    携带端口启动

    image-20210227145732156

  • 配置Nginx,隐藏三个Nacos的服务,并对其负载均衡

    upstream nacos{     
       server 192.168.100.174:8849;
       server 192.168.100.174:8850;
       server 192.168.100.174:8851;
    }
    
        server {
        		listen       8800;
           		server_name  localhost;
    			location / {
        			proxy_pass http://nacos/;
    			}
    		}
    

    对外暴露地址:http://127.0.0.1:8800/nacos,则可访问Nacos集群

此时查看后台,可以发现,在节点列表菜单中,已经显示了三个节点信息:

image-20210227152904641

并且此时这三个节点的数据源相同

修改客户端 连接集群Nacos服务

其他不动,只需将 配置文件中的spring.cloud.nacos.discovery.server-addr修改为暴露的nginx端口即可:

即为127.0.0.1:8800

修改后将消费方,提供方重启, 可以查看Nacos后台,成功注册

image-20210227153549163

访问消费方接口,也可以顺利调用: http://127.0.0.1:83/consumer/payment/nacos/10

posted @ 2021-02-27 15:41  哈哈丶丶  阅读(506)  评论(0编辑  收藏  举报