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

即可进入后台页面

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后台控制中心

可以看出,此服务已经成功注册到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后台,发现消费方也注册了进来(本例注册)

调用消费方测试接口: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

如图新增配置文件:

可以使用此链接进行直接获取测试: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)

如下结构概念图:

NameSpace

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



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

Group

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

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

Service/DataId

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

如上图示例所示:

  • 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 集群搭建

官网集群架构图:

推荐架构如下:

  • 一个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,启动时携带端口启动:

    接受参数:

    携带端口启动

  • 配置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集群

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

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

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

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

即为127.0.0.1:8800

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

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

SpringCloud Nacos的更多相关文章

  1. springboot + springcloud +nacos实战

    首先从整个软件的功能和应用场景来说,nacos更像consul,而非eureka,nacos设计的时候自带的配置中心功能,让我们省下了去搞springcloud config的时间,但这里并不是说na ...

  2. 网关服务自定义路由规则(springcloud+nacos)

    1. 场景描述 需要给各个网关服务类提供自定义配置路由规则,实时生效,不用重启网关(重启风险大),目前已实现,动态加载自定义路由文件,动态加载路由文件中的路由规则,只需在规则文件中配置下规则就可以了 ...

  3. SpringCloud+Nacos实现服务配置中心(Hoxton版本)

    关于 Nacos Spring Cloud 的详细文档请参看:Nacos Config和Nacos Discovery. 通过 Nacos Server 和 spring-cloud-starter- ...

  4. SpringCloud Nacos + Ribbon 调用服务的 2 种方法!

    在 Nacos 中,服务调用主要是通过 RestTemplate + Ribbon 实现的,RestTemplate 是 Spring 提供的 Restful 请求实现类,而 Ribbon 是客户端负 ...

  5. springcloud + nacos实现共用基础服务(灰度版本)

    背景: 当我们使用微服务时,若想在本地联调就需要启动多个服务,为了避免本地启动过多服务,现将注册中心等基础服务共用.当我们在服务A开发时,都是注册到同一个nacos,这样本地和开发环境的服务A就会同时 ...

  6. SpringCloud配置刷新机制的简单分析[nacos为例子]

    SpringCloud Nacos 本文主要分为SpringCloud Nacos的设计思路 简单分析一下触发刷新事件后发生的过程以及一些踩坑经验 org.springframework.cloud. ...

  7. 【分布式】-- 基于Nacos、OpenFeign搭建的微服务抽奖系统后台小案例

    1.项目介绍 最近入项目之前要求熟悉一下SpringCloud Nacos微服务基于Feign接口调用并整合Swagger2进行接口文档展示给前端,所以自己按照要求来编写并整合了一套基于SpringC ...

  8. 【微服务】Nacos初体验

    SpringCloud - Nacos初体验 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长 ...

  9. springcloud-gateway整合jwt+jcasbin实现权限控制

    jcasbin简介: jcasbin 是一个用 Java 语言打造的轻量级开源访问控制框架https://github.com/casbin/jcasbin,是casbin的Java语言版本.目前在 ...

  10. SpringCloud使用Nacos服务发现实现远程调用

    本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. ...

随机推荐

  1. 强大的AWS lambda

    AWS强大的lambda 自从几年前换工作后,我所参与的项目一直都是基于AWS云服务的架构,我慢慢对serverless的相关基础建设有了一定了解和实践经验.其中lambda是我心中最强大的serve ...

  2. 缩小ios的包体

    不选全部兼容设备 在xcode中导出ipa时,不勾选导出全部兼容性设备,这样导出的ipa包含两种架构:armv7和64 打包压缩 unity提供三种压缩模式可以选择,默认选择的是:default不压缩 ...

  3. HarmonyOS实战[三]—可编辑的卡片交互

    相关文章: HarmonyOS实战[一]--原理概念介绍安装:基础篇 HarmonyOS实战[二]-超级详细的原子化服务体验[可编辑的卡片交互]快来尝试吧 [本文正在参与"有奖征文|Harm ...

  4. Python 多线程实现爬取图片

    前阵子网上看到有人写爬取妹子图的派森代码,于是乎我也想写一个教程,很多教程都是调用的第三方模块,今天就使用原生库来爬,并且扩展实现了图片鉴定,图片去重等操作,经过了爬站验证,稳如老狗,我已经爬了几万张 ...

  5. Unity框架中的核心类

    组件:Component 在Unity中,所有的游戏对象都可以挂载组件.组件控制着游戏对象的行为和外观,例如渲染.动画.碰撞检测等. 而Component就是组件的基类,提供了一些通用的方法和属性,例 ...

  6. ajax中的同步异步和跨域请求

    ajax中的同步异步和跨域请求 同步异步 demo.html <script> $.ajax({ type: "get", async: false, data: &q ...

  7. 七款云上共享文件系统 POSIX 兼容性大比拼

    当用户在进行文件系统选型时,POSIX 语义兼容性是必不可缺的一项考察指标.JuiceFS 一直非常重视对 POSIX 标准的高度兼容,在持续完善功能.提高性能的同时,尽力保持最大程度的 POSIX ...

  8. 开源免费绘制小工具drawio推荐

    最近给客户做架构评估写报告时,需要画一些架构示例简图,需求很简单,没到非要用付费软件的程度. 同事推荐一款开源免费的绘制软件drawio,实际体验不错,可以满足我的使用需求. drawio官方网站: ...

  9. Oracle 数据库版本路线图

    经常会有客户困惑某个Oracle版本的支持周期,且希望得到确切的官方说明,其实这可以从MOS文档: Release Schedule of Current Database Releases (Doc ...

  10. Linux反空闲的设置和关闭

    有一定工作经验的运维人基本都会遇到这样的场景,某个窗口自动断开了,提示超时: [oracle@jystdrac1 ~]$ timed out waiting for input: auto-logou ...