Nacos注册中心

Nacos注册中心

认识nacos:nacos是阿里巴巴的产品,现在是spring cloud 的一个组件,相对于eureka功能更加丰富,在国内欢迎程度更高。


一、服务注册到nacos
  1. 在cloud-demo父工程中添加spring-cloud-alibaba的依赖:
<!--nacos的管理依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.2.5.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
  1. 在user服务和order服务pom文件中把eureka依赖换成nacos依赖:
<!-- nacos客户端依赖包 -->
	<dependency>
   		<groupId>com.alibaba.cloud</groupId>
    	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
	</dependency>
  1. 在user和order服务中配置文件换成nacos:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: order-service
#直接在spring底下配置就可以
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos默认端口地址为8848
  1. 把order和user服务都启动起来后,去nacos注册中心查看,发现已成功注册。
启动nacos命令:startup.cmd -m standalone

二、服务分级存储模型

通常在部署项目时,假如order和user服务为一个集群,则会在不同的服务器上部署很多集群。

一级是服务,例如user-service;

二级是集群,例如深圳或北京;

三级是实例,例如深圳机房的某台服务器部署了user-service的服务器。

我们随便启动一个服务order,在我们的nacos注册中心发现这个服务默认没有集群:

在这里插入图片描述

在这里插入图片描述

示例:添加user服务的集群

  1. 修改配置文件:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: user-service
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      #配置集群    
      discovery:
        cluster-name: sz #配置集群名称,也就是机房名称,例如:sz(深圳)
  1. 启动实例,先启动sz,修改集群名字为bj过后再启动一个实例,这时在nacos发现已存在sz和bj的集群:

在这里插入图片描述

  1. 再修改order服务的集群为sz后启动oder服务:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        cluster-name: sz
  1. 当通过order服务远程调用user服务时,优先调用本地服务。
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        cluster-name: sz
user-service:
  ribbon:
	#负载均衡规则:优先访问本地集群
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

这时order服务远程调用user服务时,会优先调用sz,因为order的集群也在sz。

注:当sz集群有多个user服务时,order调用user采用的是随机的方式;当sz集群没有user服务时,order才会去访问bj集群



三、根据权重负载均衡

实际生产中的场景:服务器性能存在差异,部分机器性能较好,另一些较差,我们希望性能好的机器能承担更多的用户请求!

而nacos也提供了权重配置来控制访问效率,权重越大则访问频率越高。

  1. 在nacos控制台可以设置实例的权重

在这里插入图片描述

权重小的访问少,权重大的访问多!权重1是权重0.1的十倍,如果权重为0,则不会被访问.



#### 四、环境隔离-namespace
  1. nacos控制台->服务列表默认为public,点击左侧命名控制也默认只有public

在这里插入图片描述

  1. 点击右上角新建,编号不填默认生成

在这里插入图片描述

  1. 然后在order服务的配置文件中添加namespace:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?serverTimezone=UTC&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        cluster-name: sz
        #dev环境,填id
        namespace: a927c950-a56f-4756-a311-10573ef81a52 
  1. 重启order服务,发现order服务在dev列表下,这时相当于之前的user和order已不在同一世界,再次用order调用user发现报错,无法调用,即不同namespace底下的服务不可见。

五、nacos配置管理(公共配置文件)

统一配置管理:记录微服务中一些核心的配置,微服务启动的时候会读取配置管理的配置和本地的配置来启动使用,并且后期配置修改后,会自动完成热更新,不需要重新启动,就能生效。

配置获取的步骤:
在这里插入图片描述


在nacos控制台配置管理->配置列表->右上角+号新建配置

在这里插入图片描述

此处填写的内容为有修改需求的配置,并不是任何配置都写在这里面,比如端口号,一般是固定的,不必写在这里,比如日期格式,可能会有变化,可以配置在这里。


实际项目中实现的步骤:
  1. 在user服务中引入nacos的配置管理依赖:
<!-- nacos的配置管理依赖 -->
<dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 由于bootstrap.yml(公共配置文件)的优先级比application.yml高,因此我们将nacos中的配置文件放在bootstrap.yml中。因此新建bootstrap.yml:
spring:
  application:
    name: user-service
  profiles:
    active: dev #环境
  cloud:
    nacos:
      server-addr: nacos:8848 #nacos地址
      config:
        file-extension: yaml #文件后缀名
        namespace: a927c950-a56f-4756-a311-10573ef81a52

六、nacos配置管理热更新(公共配置文件)

nacos配置文件变更后,微服务无需重启就可以感知。

方式一:加注解

@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope  //公共配置文件修改热更新
public class UserController {

方式二:ConfigurationProperties:创建新类->PatternProperties(推荐使用)

PatternProperties.java

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
    private String envSharedValue;
    private String name;
}

controller类

@Autowired
private PatternProperties properties;

@GetMapping("/prop")
public PatternProperties properties(){
    return properties;
}

nacos中的配置列表:ser-service-dev.yaml

pattern:
    dateformat: yyyy年-年MM月-月dd日-日 HH:mm:ss
    name: zhangsan

这时启动user-service,访问:user/prop即可访问配置的信息。

配置文件优先级:服务名-profile > 服务名称.yaml > 本地配置

nacos中的配置文件优先级高于本地配置文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值