第三章 : Spring cloud 注册中心 Nacos(二)
第三章 : 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.
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!