当前位置: 首页 > news >正文

SpringCloud Nacos

****************************

准备工作

首先准备号nacos的镜像

根据镜像创建nacos容器 

  nacos:container_name: nacosimage: nacos/nacos-server:v2.1.0-slimports: #需要监听三个端口- "8848:8848"- "9848:9848"- "9849:9849"privileged: truerestart: alwaysenvironment:- TZ=Asia/Shanghai- MODE=standalone

容器启动后,访问虚拟机的8848端口

账号和密码初始都为nacos

Nacos是干什么的

cart-service是一个购物车服务,item-service是一个商品服务,购物车符合会调用商品服务,由于商品服务会被频繁调用,为了面对高并发,对item-service进行了多实例部署。

由上图可知,cart-service将会调用item-service,则会出现如下问题

 为了解决如上问题,就要使用到我们的注册中心——nacos

服务注册的原理

  • 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心

  • 调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)

  • 调用者自己对实例列表负载均衡,挑选一个负载较小实例

  • 调用者向该实例发起远程调用

当服务提供者的实例宕机或者启动新实例时,调用者如何得知呢?

  • 服务提供者会定期向注册中心发送请求,报告自己的健康状态(心跳请求)

  • 当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除

  • 当服务有新实例启动时,会发送注册服务请求,其信息会被记录在注册中心的服务实例列表

  • 当注册中心服务列表变更时,会主动通知微服务,更新本地服务列表

nacos注册服务

接下来,我们把服务注册到Nacos的步骤如下:

  • 引入依赖

<!--        注册nacos服务--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
  • 配置Nacos地址

    application.properties

# 该服务在本地的端口
server.port=8080# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
#注册的服务的名字
spring.application.name=demo01-nacos# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口  这里填的是虚拟的的ip和端口
spring.cloud.nacos.discovery.server-addr=192.168.168.168:8848# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
# 应用服务 WEB 访问端口
  • 启动springboot项目(服务)

可以看到刚才注册的服务

重新写一个一模一样的项目,只修改了nacos配置和访问的端口并启动

可以看到两个服务

nacos注册配置

nacos作为配置中心的好处

  • 集中管理:Nacos将配置信息从各个应用中剥离出来,实现了配置的集中管理。这使得配置管理变得更加高效和便捷,尤其是在微服务架构中,当服务实例数量众多时,逐个修改每个服务的配置将变得复杂且容易出错。
  • 动态更新:Nacos支持配置的动态更新,当配置发生变化时,可以实时推送到各个服务实例,无需重启应用。这极大地提高了配置的灵活性和响应速度。

案例

导入依赖

还有一个lombok可以加一下

编写application.properties中nacos配置中心的配置

# 应用服务 WEB 访问端口
server.port=8080# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.htmlspring.application.name=nacos-config# 注册nacos的配置   作为一个配置,它首先也是一个服务# 服务相关
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=192.168.168.168:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public# 配置相关
# Nacos认证信息
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
spring.cloud.nacos.config.server-addr=192.168.168.168:8848
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=# nacos:配置文件的名字
spring.config.import=nacos:demo-nacos-config.properties?refresh=true

在nacos配置中心中编辑配置 

编写RedisConfig,等下用于读取配置中心的配置

package com.example.config;import lombok.Data;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;@Configuration
@ConfigurationProperties(prefix = "spring.data.redis")
@Data
public class RedisConfig {private String host;private int port;private String password;private int database;
}

编写测试控制器,读取nacos中的配置

package com.example.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("test")
public class DemoController {@Autowiredprivate RedisConfig redisConfig;@GetMapping("getAllConfigs")public void getAllConfigs() {System.out.println(redisConfig.getHost());System.out.println(redisConfig.getPort());System.out.println(redisConfig.getPassword());System.out.println(redisConfig.getDatabase());}
}

浏览器中访问接口,查看控制台输出

符合预期,我们从nacos的配置中心中拿到了依赖

http://www.lryc.cn/news/437722.html

相关文章:

  • 机器学习算法详细解读和python实现
  • 【Linux】Linux权限历险记---组和用户的关系
  • 华为HCIA、HCIP和HCIE认证考试明细
  • C++数据结构
  • Linux下read函数详解
  • 【二叉树遍历算法应用】------补录
  • AtCoder Beginner Contest 368
  • WebGL系列教程六(纹理映射与立方体贴图)
  • 为什么nii.gz转.nrrd标签体积变大?
  • 软件安装攻略:EmEditor编辑器下载安装与使用
  • Redis的watch机制详解
  • UnrealEngine 打包Android平台应用
  • Linux:git
  • electron有关mac构建
  • C语言-数据结构 弗洛伊德算法(Floyd)邻接矩阵存储
  • pyspark 安装记录
  • 高度可定制的电竞鼠标,雷柏VT1 PRO MAX体验
  • 经验笔记:SOA(面向服务的架构)
  • triton之ttir学习
  • 如何在AWS账户上进行充值:一份详尽指南
  • (六十四)第 10 章 内部排序(静态链表的插入排序)
  • appium历史版本地址链接
  • TCPIP网络编程(尹圣雨)UDP 轮流收发消息(windows)
  • 【相机方案(2)】V4L2 支持相机图像直接进入GPU内存吗?DeepStream 确实可以将图像数据高效地放入GPU内存进行处理!
  • UEFI——PEI阶段
  • Nacos下载和启动
  • 怎么选择适合的服务器
  • 通义千问大模型Java调用,百炼
  • 新发现!一键管理所有远程会话的神器——1Remote
  • 华为 HCIP 认证费用和报名资格