当前位置:网站首页>Nacos注册中心-----从0开始搭建和使用
Nacos注册中心-----从0开始搭建和使用
2022-06-21 16:07:00 【Rk..】
目录
2.2、在user-service和order-service中配置nacos地址
1、安装Nacos
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

1.1、下载安装包
在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:
GitHub的Release下载页:Releases · alibaba/nacos · GitHub
1.2、解压并且配置端口
解压完成后如图:
目录说明:
bin:启动脚本
conf:配置文件
配置端口:
Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录下的application.properties文件修改配置文件中的端口

1.3、启动、访问
启动:
进入bin目录,结构如下:

然后当前目录下cmd,使用命令启动:startup.cmd -m standalone

访问:
在浏览器输入地址:http://127.0.0.1:8848/nacos即可:

账号和密码都是:nacos,进入后

2、服务注册到nacos
2.1、引入依赖
父工程:
<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>子工程user-service和order-service中:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.2、在user-service和order-service中配置nacos地址
spring:
cloud:
nacos:
server-addr: localhost:88483、服务分级存储模型
一个服务可以有多个实例,这些实例可以分布到全国各地的不同机房。
例如:user-service是服务,一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型,如图:

微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。
3.1、给user-service配置集群
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称设置两个服务的集群为HZ,1个位为SH,完成后启动服务,进入控制台查看:

3.2、同集群优先的负载均衡
默认的ZoneAvoidanceRule并不能实现根据同集群优先来实现负载均衡。
因此Nacos中提供了一个NacosRule的实现,可以优先从同集群中挑选实例。
1、给order-service配置集群信息
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称order-service和user-serverce1和user-service2都属于HZ集群,要优先访问它们
2、修改负载均衡规则
修改order-service的application.yml文件
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 配置完成后重启oder服务,它每次远程调用user服务时都会优先调用user1和user2。
4、权重配置
实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。在nacos控制台,找到user-service的实例列表,点击编辑,即可修改权重:性能好的服务器权重设置大一些,性能差的服务器权重设置的小一些。

如果权重修改为0,则该实例永远不会被访问。
比如:平滑升级,先将1个服务的实例权重调为0,对其进行升级后,权重再一点一点给它加大。(刚开始权重小,使少量用户请求到这个服务,进行测试)
5、Nacos进行统一配置和配置热更新
5.1、统一配置管理

填写配置信息:

项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。
5.2、从Nacos上拉取配置
微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。

1、引入nacos-config配置
首先,在user-service服务中,引入nacos-config的客户端依赖:
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>2、添加bootstrap.yaml
然后,在user-service中添加一个bootstrap.yaml文件,内容如下:
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地址,再根据
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。
本例中,就是去读取userservice-dev.yaml:
![]()
3、读取nocos配置
在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:
package cn.rk.user.web;
import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Value("${pattern.dateformat}")
private String dateformat;
@GetMapping("now")
public String now(){
return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
}
}访问该接口:

5.3、配置热更新
方式1:在@Value注入的变量所在类上添加注解@RefreshScope:

方式2:
使用@ConfigurationProperties注解代替@Value注解。
在user-service服务中,添加一个类,读取patterrn.dateformat属性:
package cn.rk.user.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}在UserController中使用这个类代替@Value:

5.4、配置共享
其实微服务启动时,会去nacos读取多个配置文件,例如:
[spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml[spring.application.name].yaml,例如:userservice.yaml
而[spring.application.name].yaml不包含环境,因此可以被多个环境共享。
6、Nacos与Eureka的区别
Nacos的服务实例分为两种l类型:
临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
非临时实例:如果实例宕机,不会从服务列表剔除(会等待实例恢复),也可以叫永久实例。

Nacos与eureka的共同点:
都支持服务注册和服务拉取
都支持服务提供者心跳方式做健康检测
Nacos与Eureka的区别:
Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
边栏推荐
- 今年的 618 不行了?
- FragmentStatePagerAdapter 与FragmentPagerAdapter的区别
- The new razor component supports proxy connection to RDP, and jumpserver fortress v2.23.0 is released
- AttributeError: ‘Book‘ object has no attribute ‘sheet‘
- [MySQL learning notes 11] sort query
- iframe跨域传值
- The main relations and differences between Poisson sampling and Bernoulli sampling
- BFS与DFS
- clickhouse学习笔记2:基本使用教程
- 欧洲家具EN 597-1 跟EN 597-2两个阻燃标准一样吗?
猜你喜欢
随机推荐
加速雲原生應用落地,焱融 YRCloudFile 與天翼雲完成兼容性認證
[MySQL learning notes 15] user management
Jetpack Compose 管理状态(一)
钣金行业MES系统的特色需求
QT knowledge: using the qgraphicspixmapitem class
win32com 操作excel
Google play 应用签名密钥证书,上传签名证书区别
Still using xshell? Try this cool SSH terminal tool, which is very powerful!
一些细节
Detailed explanation of Fisher information quantity detection countermeasure sample code
Create a server with node
node服务器 res.end()中写中文,客户端中乱码问题的解决方法
In the "roll out" era of Chinese games, how can small and medium-sized manufacturers solve the problem of going to sea?
go corn定时任务简单应用
How can aggressive programmers improve R & D efficiency Live broadcast Preview
[graduation n-year series] the fourth year of graduation
变量
BM22 比较版本号
Iframe cross domain value transfer
The beta version of move protocol is stable, and it is temporarily decided to expand the scale of the prize pool









