前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nacos 作为服务注册中心 & 配置中心

Nacos 作为服务注册中心 & 配置中心

作者头像
BUG弄潮儿
发布2022-12-05 20:42:41
1.1K0
发布2022-12-05 20:42:41
举报
文章被收录于专栏:JAVA乐园JAVA乐园

注册中心

1. 服务注册与发现流程

角色说明

  • 服务注册中心(Register Service):它是一个 Nacos Server,可以为服务提供者和服务消费者提供服务注册和发现功能。
  • 服务提供者(Provider Service):它是一个 Nacos Client,用于对外服务。它将自己提供的服务注册到服务注册中心,以供服务消费者发现和调用。
  • 服务消费者(Consumer Service):它是一个 Nacos Client,用于消费服务。它可以从服务注册中心获取服务列表,调用所需的服务。

流程说明

  • 从 Nacos 官方提供的下载页面中,下载 Nacos Server 并运行。
  • 服务提供者 Nacos Client 启动时,会把服务以服务名(spring.application.name)的方式注册到服务注册中心(Nacos Server);
  • 服务消费者 Nacos Client 启动时,也会将自己的服务注册到服务注册中心;
  • 服务消费者在注册服务的同时,它还会从服务注册中心获取一份服务注册列表信息,该列表中包含了所有注册到服务注册中心上的服务的信息(包括服务提供者和自身的信息);
  • 在获取了服务提供者的信息后,服务消费者通过 HTTP 或消息中间件远程调用服务提供者提供的服务。

2. 单机版客户端搭建

引入依赖

<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

编写配置文件

management:
  endpoints:
     web:
       exposure:
         include: '*'  #暴露所有端点
server:
  port: 8081
spring:
  application:
     name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848   #nacos地址

启动类添加注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

页面查看

配置中心

1. 配置获取流程图

2.单机版客户端搭建

引入依赖

编写bootstrap.yml配置文件

bootstrap.yml 是系统级别的,加载优先级高于application.yml ,负责从外部加载配置并解析

management:
  endpoints:
     web:
       exposure:
         include: '*'  #springboot监控开启所有端点
server:
  port: 8083
spring:
  application:
    name: config-client
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848   #服务注册到nacos注册中心的地址
      config:
        server-addr: 127.0.0.1:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置

编写application.yml配置文件

可以通过指定不同的激活文件配合Data Id从nacos获取不同环境下的配置

spring:
  profiles:
     active: dev #激活 dev 的配置

nacos 控制台添加配置

Nacos Server 配置的Data ID的完整格式如下:${prefix}-${spring.profiles.active}.${file-extension}  dataId 格式中各参数说明如下:

  • ${prefix}:默认取值为微服务的服务名,即配置文件中 spring.application.name 的值,我们可以在配置文件中通过配置 spring.cloud.nacos.config.prefix 来指定。
  • ${spring.profiles.active}:表示当前环境对应的 Profile,例如 dev、test、prod 等。当没有指定环境的 Profile 时,其对应的连接符也将不存在, dataId 的格式变成 ${prefix}.${file-extension}。
  • ${file-extension}:表示配置内容的数据格式,可以在配置文件中通过配置项 spring.cloud.nacos.config.file-extension 来配置,例如 properties 和 yaml。

启动类添加注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

编写配置类获取配置

注意注解@RefreshScope

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "config")
@RefreshScope
public class Config {

    private String version;

    private String name;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

配置使用

注意注解@RefreshScope

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RefreshScope
@RestController
@RequestMapping("api/vi/config-client")
public class Controller {

    @Autowired
    private Config config;

    @GetMapping
    public String get() {
        return "name:" + config.getName() + " | version:" + config.getVersion();
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注册中心
    • 1. 服务注册与发现流程
      • 2. 单机版客户端搭建
      • 配置中心
        • 1. 配置获取流程图
          • 2.单机版客户端搭建
          相关产品与服务
          服务网格
          服务网格(Tencent Cloud Mesh, TCM),一致、可靠、透明的云原生应用通信网络管控基础平台。全面兼容 Istio,集成腾讯云基础设施,提供全托管服务化的支撑能力保障网格生命周期管理。IaaS 组网与监控组件开箱即用,跨集群、异构应用一致发现管理加速云原生迁移。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档