第三章 : Spring cloud 注册中心 Nacos(二)

发布时间:2024年01月09日

第三章 : Spring cloud 注册中心 Nacos(二)

前言

本章知识点:介绍Nacos概念、SpringCloud如何集成Nacos创建微服务。

Springboot 2.3.12.RELEASE,spring cloud Hoxton.SR12,spring cloud alibaba 2.2.9.RELEASE

Nacos概念详解

数据模型

Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。

在这里插入图片描述

  • 作为注册中心时,Namespace + Group + Service
  • 作为配置中心时,Namespace + Group + DataId

Namespace命名空间
用于进行租户粒度的配置隔离。默认为 public(公共命名空间)。

不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

Group服务分组
不同的服务可以归类到统一分组。默认为DEFAULT_GROUP(默认分组).

Service服务
例如说,用户服务、订单服务、商品服务等等。

服务领域模型

在这里插入图片描述

类视图

在这里插入图片描述

Springcloud Nacos 入门案例

Idea中,创建maven工程springcloud-day01

(1)在pom中添加如下依赖
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/>
    </parent>
<properties>
        <java.version>1.8</java.version>

    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
     
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR12</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.9.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
(2) bootstrap.yml 配置文件
server:
  port: 8081
spring:
  application:
    name: service-provider
  cloud:
    nacos:
      server-addr: 192.168.92.105:8848
      discovery:
        enabled: true
        namespace: ce6f69ba-c2eb-4a97-b205-817a71a5087a
        group: DEV_GROUP


logging:
  level:
    org.springframework.web.servlet.DispatcherServlet: TRACE
  • port: 8081 #指定端口号

  • server-addr: 192.168.92.105:8848 #指定注册中心地址,集群用逗号分隔

  • group: DEV_GROUP #指定 服务组

  • namespace: ce6f69ba-c2eb-4a97-b205-817a71a5087a #指定命名空间

注意:需要创建一个命名空间

在这里插入图片描述

? 图3-4

(3) 创建一个EchoController类
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicInteger;

@RestController
@Slf4j
class EchoController {

    @GetMapping(value = "/echo/{message}")
    public String echo(@PathVariable String message) {
        log.info("echo:{}",message);
        return "Hello ," +message;
    }

    @GetMapping(value = "/echo")
    public String echo() {
        String result =message();
        log.info("echo:{}",result);
        return result;
    }
    protected static AtomicInteger counter=new AtomicInteger();
    protected  String message(){
        return "张三 "+ counter.getAndIncrement();
    }
}
(4) 在启动类上增加注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudDay01Application {

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

}

@EnableDiscoveryClient 注解可以连接注册中心,将服务注册到服务中心。如图 3-5 所示:

在这里插入图片描述

? 图3-5

NacosDiscoveryProperties 配置参数详解

通过NacosDiscoveryProperties 源码,可以了解nacos.discovery的参数

@ConfigurationProperties("spring.cloud.nacos.discovery")
public class NacosDiscoveryProperties {

	private static final Logger log = LoggerFactory
			.getLogger(NacosDiscoveryProperties.class);

	/**
	 * nacos注册中心参数前缀
	 */
	public static final String PREFIX = "spring.cloud.nacos.discovery";

	private static final Pattern PATTERN = Pattern.compile("-(\\w)");

	/**
	 * nacos发现服务器地址
	 */
	private String serverAddr;

	/**
	 * nacos身份验证用户名
	 */
	private String username;

	/**
	 * nacos身份验证密码
	 */
	private String password;

	/**
	 *	服务的域名,通过该域名可以动态地获取服务器地址获得
	 * 
	 */
	private String endpoint;

	/**
	 * 命名空间、不同环境的分离注册表
	 */
	private String namespace;

	/**
	 * 服务器获取新服务的持续时间,观察延迟的时间。
	 */
	private long watchDelay = 30000;

	/**
	 * nacos命名日志文件名。
	 */
	private String logName;

	/**
	 * 服务名称到注册表,默认应用名称
	 */
	@Value("${spring.cloud.nacos.discovery.service:${spring.application.name:}}")
	private String service;

	/**
	 * 服务的权重;例如,值越大,权重就越大
	 */
	private float weight = 1;

	/**
	 * nacos的群集名称
	 */
	private String clusterName = "DEFAULT";

	/**
	 * nacos的组名
	 */
	private String group = "DEFAULT_GROUP";

	/**
	 * 在应用程序启动时是否从本地缓存命名加载,默认false
	 */
	private String namingLoadCacheAtStart = "false";

	/**
	 * 注册的元数据
	 */
	private Map<String, String> metadata = new HashMap<>();

	/**
	 * 如果您只想订阅,但不想注册服务,请将其设置为 false;默认是true 
	 */
	private boolean registerEnabled = true;

	/**
	 *如果自动检测ip工作正常,无需设置,异常需要设置服务实例注册的ip地址
	 */
	private String ip;

	/**
	 * 注册哪个网络接口的ip
	 */
	private String networkInterface = "";

	/**
	 * 选择IPv4或IPv6,如果未设置,则会选择IPv4
	 */
	private String ipType = "IPv4";

	/**
	 * 如果自动检测端口工作良好,则无需设置要为服务实例注册的端口
	 */
	private int port = -1;

	/**
	 * 是否开启https服务,默认FALSE
	 */
	private boolean secure = false;

	/**
	 * 命名空间的访问密钥。
	 */
	private String accessKey;

	/**
	 * 命名空间的密钥。
	 */
	private String secretKey;

	/**
	 * 是否开启实例接受请求,默认值为true。
	 */
	private boolean instanceEnabled = true;

	/**
	 * 实例是持久化还是临时,默认值为true
	 */
	private boolean ephemeral = true;

	/**
	 * 服务注册期间引发异常,是否记录错误,默认TRUE
	 */
	private boolean failFast = true;

小结

Nacos注册中心的实践思路:

1、Nacos管理后台创建一个命名空间

2、POM.xml引入nacos-Discovery相关starter

3、yml配置指定必选参数:注册地址,服务名,分组,命名空间

4、启动类加上注解@EnableDiscoveryClient

5、registerEnabled默认TRUE,注册与订阅,如果不需要注册,设置为 false.

提示:yml文件名:bootstrap.yml.

在这里插入图片描述

文章来源:https://blog.csdn.net/RodJohnsonDoctor/article/details/135479952
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。