微服务03_nacos注册中心

一、nocos注册中心

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

1、win安装:

在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases

  1. 解压文件nacos-server-1.4.1.zip
    目录分析:
    target:是一个jar包,而nocos是基于JAVA语言实现。
    conf:配置文件。例如端口默认8848
    bin:可执行文件。可以直接startup.

  2. cmd下启动:startup.cmd -m standalone 【模式:单机启动】
    在这里插入图片描述
    在这里插入图片描述

2、服务注册到Nacos

  1. 第一步:在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-alibaba-dependencies</artifactId>
	<version>2.2.6.RELEASE</version>
	<type>pom</type>
	<scope>import</scope>
</dependency>
  1. 注释掉order-service和user-service中原有的eureka依赖。
  2. 添加nacos的客户端依赖:
<!-- nacos客户端依赖 -->
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 修改user-service&order-service中的application.yml文件,注释eureka地址,添加nacos地址:
spring:
	cloud:
		nacos:
			server-addr: localhost:8848 # nacos 服务端地址

在这里插入图片描述

3、Nacos服务分级存储模型

Nacos服务分级存储模型
① 一级是服务,例如userservice
② 二级是集群,例如杭州或上海
③ 三级是实例,例如杭州机房的某台部署了userservice的服务器
在这里插入图片描述
在这里插入图片描述

服务比如说:orderService订单服务
集群比如说:上海集群、北京集群,当上海的用户就去调用上海集群的订单服务即可。nacos.discovery.cluster-name: beijing
实例:一个个服务。userService01/userService02/userService03

配置集群实例属性

如何设置实例的集群属性
① 修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可

修改application.yml,添加如下内容:

spring:
	cloud:
		nacos:
			server-addr: localhost:8848 # nacos 服务端地址
			discovery:
				cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、集群负载均衡

需要给Order配置集群属性,目的是为了:当order远程调用user服务时,能选择本地集群。【能选择同一个名字的集群】(实例配置好了集群,是为了能选择实例集群)。

1.order中添加配置,加入集群

  cloud:
    nacos:
      server-addr: localhost:8848 #nacos 服务端地址
      discovery:
        cluster-name: HZ

在这里插入图片描述

2.将 默认 轮巡 改为 优先选择集群(集群中默认是随机)

优先选择集群,在集群中多个服务,在进行随机访问-负载均衡
当本地服务集群都消失后,还可以去访问其他集群。并且在调用者的日志中出现警告

userservice:
  ribbon:
    #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则
    NFLoadBalancerRuleClassName:  com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
  • 模拟当本地集群挂掉后,日志会出现警告{一次夸集群访问}
    在这里插入图片描述

5、根据权重负载均衡(测试)

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高

在这里插入图片描述

实例的权重控制
① Nacos控制台可以设置实例的权重值,0~1之间
② 同集群内的多个实例,权重越高被访问的频率越高
③ 权重设置为0则完全不会被访问.

当版本升级的时候,可以将8081服务器的权重调为0,那么81不在接受用户的请求了,可以做一些版本的升级,那么可以放出0.1来,让少量的客户进来测试,如果没有问题,可以继续扩大权重。从而让用户无感知的,进行服务器的升级。

6、环境隔离 - namespace

层次:
第一层:NameSpace 【默认就是public】 环境隔离例如:测试环境、生成环境变化。
第二层:Group 【DEFAULT_GROUP】。分组例如:把业务相关度高的服务,放在一个组里面。例如订单和支付。
第三层:服务Service/Date 【userservice、orderservice】。
第四层:集群模式【上海、杭州、北京集群】
第五层:实例【userservice01/02/03】
在这里插入图片描述

在这里插入图片描述

  • 创建命名空间
    在这里插入图片描述
    在这里插入图片描述
  • 修改服务的命名空间:
    在这里插入图片描述

二、Eureka/nocos对比

1.Eureka和nacos的服务注册和拉取:

  1. 服务提供者在启动时,会把自己的服务信息提交给注册中心。
  2. 注册中心会把信息保留下来
  3. 消费者需要消费时,就可以找注册中心进行服务拉取。服务发现。
    这个服务拉取的动作,并不是每一次调用接口要做服务拉取。而是将从注册中心中的拉取的消息,进行缓存【服务列表缓存】。每30秒会去注册中心进行拉取更新数据。
    3.1 当服务拉取后,在根据负载均衡挑选一个进行远程调用。

在这里插入图片描述

2. Nacos与eureka的共同点

① 都支持服务注册服务拉取
② 都支持服务提供者心跳方式做健康检测

3. Nacos与Eureka的区别

Nacos支持服务端主动检测提供者状态:
临时实例采用:服务提供者向注册中心进行心跳模式
非临时实例采用:注册中心向服务提供者主动检测模式
② 临时实例心跳不正常会被剔除,非临时实例则不会被剔除,等待正常。
Nacos支持服务列表变更后,nacos进行消息推送模式,服务消费者的服务列表更新更及时。
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方法

  • 如何设置临时和非临时的实例:一个配置:
spring:
  cloud:
    nacos:
      discovery: 
        ephemeral: false # 是否是临时实例

三、Nacos配置管理

配置更改热更新

1、统一配置管理的服务

该服务会记录核心的配置,当其他微服务启动的时候,会读取配置管理的服务,和本地的配置服务相结合使用。
当配置发生了更改,不用逐个服务去更改,而是找到【服务配置中心】,进行修改即可。
当修改了【配置中心】的信息后,该服务会通知各个服务,从而各个服务去完成配置的读取。
在这里插入图片描述

1.创建配置

注意:项目的核心配置,需要热更新的配置才有放到 nacos 管理的必要。基本不会变更的一些配置(例如数据库连接)还是保存在微服务本地比较好
在这里插入图片描述

2.启动时,读取yaml的顺序:

  • 首先我们需要了解 Nacos 读取配置文件的环节是在哪一步,在没加入 Nacos 配置之前,获取配置是这样:
    在这里插入图片描述
  • 加入 Nacos 配置,它的读取是在 application.yml 之前的:
    在这里插入图片描述
  • 这时候如果把 nacos 地址放在 application.yml 中,显然是不合适的,Nacos 就无法根据地址去获取配置了。
    因此,nacos 地址必须放在优先级最高的 bootstrap.yml 文件。
    在这里插入图片描述

3.引入 nacos-config 依赖

首先,在 user-service 服务中,引入 nacos-config 的客户端依赖:

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

4.添加 bootstrap.yml 【其中必须是yaml】

然后,在 user-service 中添加一个 bootstrap.yml 文件,内容如下:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

根据 spring.cloud.nacos.server-addr 获取 nacos地址,再根据 s p r i n g . a p p l i c a t i o n . n a m e − {spring.application.name}- spring.application.name{spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。
在这个例子例中,就是去读取 userservice-dev.yaml
在这里插入图片描述

5. 测试:使用代码来验证是否拉取成功

在 user-service 中的 UserController 中添加业务逻辑,读取nacos中配置中心的:pattern.dateformat 配置并使用:

@Value("${pattern.dateformat}")
private String dateformat;

@GetMapping("now")
public String now(){
    //格式化时间
    return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}

启动服务后,访问:http://localhost:8081/user/now

2、配置热更新

我们最终的目的,是修改 nacos 中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新。

有两种方式:

  1. 用 @value 读取配置时,搭配 @RefreshScope;
  2. 直接用 @ConfigurationProperties 读取配置

方式一:在 @Value 注入的变量所在类上添加注解 @RefreshScope

  • @RefreshScope
    在这里插入图片描述

方式二:使用 @ConfigurationProperties 注解读取配置文件,就不需要加 @RefreshScope 注解。

@ConfigurationProperties

在 user-service 服务中,添加一个 PatternProperties 类,读取 patterrn.dateformat 属性

package cn.itcast.user.config;
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    public String dateformat;
}
-----controller------

package cn.itcast.user.web;

@Autowired
private PatternProperties patternProperties;

@GetMapping("now2")
public String now2(){
    //格式化时间
    return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.dateformat));
}

3、配置共享

什么时候需要配置共享呢?
某个配置在开发、测试、上限时的配置都是一样的,那么就需要了配置共享。如果不使用配置共享的话,就需要在每个配置文件都写一份,如果改动就得去每个配置文件去改动。

在这里插入图片描述

其实在服务启动时,nacos 会读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml

  • [spring.application.name].yaml,例如:userservice.yaml

  • 这里的 [spring.application.name].yaml 不包含环境,因此可以被多个环境共享

1.添加一个环境共享配置:

  • 我们在 nacos 中添加一个 userservice.yaml 文件:
    在这里插入图片描述

在 user-service 中读取共享配置
在 user-service 服务中,修改 PatternProperties 类,读取新添加的属性:
在这里插入图片描述

在 user-service 服务中,修改 UserController,添加一个方法:
在这里插入图片描述

2.测试: 运行两个 UserApplication,使用不同的profile

修改 UserApplication2 这个启动项,改变其profile值:

  • 这样,UserApplication(8081) 使用的 profile 是 dev
    在这里插入图片描述

  • UserApplication2(8082) 使用的 profile 是test
    在这里插入图片描述

  • 启动 UserApplication 和 UserApplication2
    访问地址:http://localhost:8081/user/prop,结果:
    可以看出来,不管是 dev,还是 test 环境,都读取到了 envSharedValue 这个属性的值。
    在这里插入图片描述
    在这里插入图片描述


上面的都是同一个微服务下,那么不同微服务之间可以环境共享吗?

通过下面的两种方式来指定:

extension-configs
shared-configs

spring: 
  cloud:
    nacos:
      config:
        file-extension: yaml # 文件后缀名
        extends-configs: # 多微服务间共享的配置列表
          - dataId: common.yaml # 要共享的配置文件id
spring: 
  cloud:
    nacos:
      config:
        file-extension: yaml # 文件后缀名
        shared-configs: # 多微服务间共享的配置列表
          - dataId: common.yaml # 要共享的配置文件id

3.配置的优先级:

当前环境的配置优先级 大于 共享优先级 大于 本地配置
在这里插入图片描述

4、搭建Nacos集群

企业中更强调高可用,nacos一定会是集群模式。

  1. 不管有几台nacos服务器,都需要服务数据共享。所以会有mysql集群,这样多个nacos都来访问mysql,完成数据读写共享。
  2. 用户请求进入以后,用Nginx负载均衡反向代理,访问不同的nacos节点。

在这里插入图片描述

1. 搭建mysql集群并初始化数据库表

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,
  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 '租户字段',
  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 '租户字段',
  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');

2. 下载解压nocos

3. 修改集群配置节点信息、数据库配置

第一:
进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:
127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847

第二:
然后修改application.properties文件,添加数据库配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

4. 分别启动多个nacos节点

然后分别修改三个文件夹中的application.properties,server.port=8845、46/47

5. nginx反向代理

修改conf/nginx.conf文件,配置如下:

upstream nacos-cluster {
    server 127.0.0.1:8845;
	server 127.0.0.1:8846;
	server 127.0.0.1:8847;
}

server {
    listen       80;
    server_name  localhost;

    location /nacos {
        proxy_pass http://nacos-cluster;
    }
}

idea代码中application.yml文件配置如下:

spring:
cloud:
nacos:
server-addr: localhost:80 # Nacos地址

而后在浏览器访问:http://localhost/nacos即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Nacos 是一个开源的服务发现和配置管理平台,支持多种注册中心和配置中心的功能。Go 微服务可以使用 Nacos 作为注册中心来管理服务注册和发现。 下面是使用 Go 微服务Nacos 注册中心的步骤: 1. 安装 Nacos 首先需要安装 Nacos,可以通过官方的下载页面下载最新版本的 Nacos,并按照官方文档进行安装和配置。 2. 引入 Go 客户端 可以使用官方提供的 Go 客户端来和 Nacos 进行交互。可以使用以下命令来安装 Go 客户端: ``` go get github.com/nacos-group/nacos-sdk-go ``` 3. 注册服务 在 Go 微服务中,可以使用以下代码来注册服务到 Nacos 中: ```go import ( "github.com/nacos-group/nacos-sdk-go/vo" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-sdk-go/clients/naming_client" ) func main() { // 创建命名客户端 clientConfig := vo.NacosClientParam{ Endpoint: "localhost:8848", // Nacos 服务端地址 NamespaceId: "default", // 命名空间 ID } client, err := clients.CreateNamingClient(map[string]interface{}{ "clientConfig": clientConfig, }) if err != nil { // 处理错误 } // 注册服务 serviceName := "example" ip := "127.0.0.1" port := 8080 instance := vo.RegisterInstanceParam{ Ip: ip, Port: uint64(port), ServiceName: serviceName, } _, err = client.RegisterInstance(instance) if err != nil { // 处理错误 } } ``` 4. 发现服务 在 Go 微服务中,可以使用以下代码来从 Nacos 中发现服务: ```go import ( "github.com/nacos-group/nacos-sdk-go/vo" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-sdk-go/clients/naming_client" ) func main() { // 创建命名客户端 clientConfig := vo.NacosClientParam{ Endpoint: "localhost:8848", // Nacos 服务端地址 NamespaceId: "default", // 命名空间 ID } client, err := clients.CreateNamingClient(map[string]interface{}{ "clientConfig": clientConfig, }) if err != nil { // 处理错误 } // 获取服务实例 serviceName := "example" instances, err := client.SelectAllInstances(vo.SelectAllInstancesParam{ ServiceName: serviceName, }) if err != nil { // 处理错误 } // 随机选择一个实例进行调用 if len(instances) > 0 { instance := instances[rand.Intn(len(instances))] // 调用服务 } } ``` 需要注意的是,Nacos 还支持更多的功能,如配置管理、服务健康检查等。建议根据具体需求使用相应的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值