SpringCloud nacos

news2024/11/24 19:52:51

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

准备工作

首先准备号nacos的镜像

根据镜像创建nacos容器 

  nacos:
    container_name: nacos
    image: nacos/nacos-server:v2.1.0-slim
    ports: #需要监听三个端口
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    privileged: true
    restart: always
    environment:
      - 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.html

spring.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 {
    @Autowired
    private 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.coloradmin.cn/o/2122842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Axure高效打造大屏可视化BI数据展示

在使用AxureRP软件设计大屏可视化BI数据显示模板时&#xff0c;我们可以遵循一系列高效的方法和步骤来确保设计的质量和效率。以下是一个详细的教程&#xff0c;指导如何高效地使用AxureRP进行大屏界面设计。 一、确定设计标准与分辨率 通常&#xff0c;大屏可视化设计以标准的…

MySQL事务【后端 13】

MySQL事务 在数据库管理系统中&#xff0c;事务&#xff08;Transaction&#xff09;是一个非常重要的概念&#xff0c;它确保了数据库操作的完整性和一致性。MySQL作为一种流行的关系型数据库管理系统&#xff0c;自然也支持事务处理。本文将深入探讨MySQL事务的基本概念、特性…

基于YOLOv8的PCB缺陷检测算法,加入一种基于内容引导注意力(CGA)的混合融合方案(一)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文内容&#xff1a;针对基于YOLOv8的PCB缺陷检测算法进行性能提升&#xff0c;加入各个创新点做验证性试验。 1&#xff09;提出了一种基于内容引导注意力(CGA)的混合融合方案&#xff0c;mAP0.5由原始的0.966提升至0.975 1.PCB缺陷…

Django 如何全局捕获异常和DEBUG

DEBUG 默认&#xff1a;False 一个开启、关闭调试模式的布尔值。 永远不要在 DEBUG 开启的情况下将网站部署到生产中。 调试模式的主要功能之一是显示详细的错误页面。如果你的应用程序在 DEBUG 为 True 时引发了异常&#xff0c;Django 会显示一个详细的回溯&#xff0c;包…

AplPost使用

请求get 方法 1&#xff0c;添加token 2&#xff0c;填写get 的参数 2,post方法 把对象的形式直接复制到row里面 3&#xff0c;delete方法 可以直接后面拼接参数

CTK框架(八):服务追踪

目录 1.简介 2.实现方式 3.具体实现 3.1.新建插件PluginA​​ 3.2.新建插件PluginB 4.服务追踪的优势 5.应用场景 6.总结 1.简介 CTK服务追踪是一种机制&#xff0c;用于在CTK插件框架中追踪和管理插件提供的服务。当一个插件注册了一个服务到服务注册中心后&#xff0…

SCADA|KingIOServer数据存入KingHistorian的过程记录

哈喽,你好啊,我是雷工! KingIOServer是采集数据的软件,KingHistorian是工业数据库; 最近用到KingIOServer采集到的数据存入到KingHistorian工业库,然后KingFusion再连接KingHistorian获取历史数据并曲线展示的应用功能; 以下为测试笔记; 01 软件安装 KingIOServer软…

动态代理IP池设计:打造高效网络工具

在互联网飞速发展的今天&#xff0c;动态代理IP池成为了网络世界中的一大法宝。无论是数据采集、网络营销还是电商运营&#xff0c;动态代理IP池都能提供极大的便利。今天&#xff0c;我们来深入探讨一下如何设计一个高效的动态代理IP池。 什么是动态代理IP池&#xff1f; 动…

高性能多目标进化优化算法求解DTLZ1-DTLZ9,MATLAB代码

DTLZ&#xff08;Deb-Thiele-Laumanns-Zitzler&#xff09;测试函数系列是多目标优化领域中一组广泛使用的基准测试问题。这些测试问题由Kalyanmoy Deb、Lothar Thiele、Marco Laumanns和Eckart Zitzler于2002年提出&#xff0c;旨在评估和比较多目标优化算法的性能。以下是DTL…

HTML5+CSS+JS制作中秋佳节页面

HTML5CSSJS制作中秋佳节页面 中秋节&#xff0c;是中国民间的传统节日。每年农历八月十五庆祝。 在中秋节这一天&#xff0c;人们会通过各种方式庆祝&#xff0c;其中最重要的活动之一就是赏月。家人团聚在一起&#xff0c;共同欣赏明亮的月亮。同时&#xff0c;吃月饼也是中秋…

【Go】-Gin框架

目录 Gin框架简介 简单示例 Gin渲染 HTML渲染 自定义模板函数 静态文件处理 使用模板继承 JSON渲染和XML渲染 获取参数 获取querystring参数 获取form参数 获取Path参数 参数绑定 文件上传 单个文件上传 参数 多个文件上传 重定向 HTTP重定向 路由重定向 …

【Tourism】Xianyang

文章目录 1、陕西省咸阳市2、清渭楼3、古渡廊桥4、古渡遗址博物馆5、文庙6、窦家BingBing面7、凤凰台8、安国寺9、福园巷子10、参考 1、陕西省咸阳市 咸阳市&#xff0c;陕西省辖地级市&#xff0c;地处陕西省关中平原中部&#xff0c;是中国大地原点所在地&#xff0c;其境东…

iPhone 16系列发布:硬件升级但创新乏力?iPhone还值得入手吗?

2024年苹果发布会如约而至&#xff0c;重磅推出了iPhone 16系列。然而&#xff0c;发布会结束后&#xff0c;许多科技评论员和用户不禁质疑&#xff1a;苹果的创新精神是否逐渐消退&#xff1f;从发布会的内容来看&#xff0c;iPhone 16在设计、性能上有所提升&#xff0c;但和…

软件测试之单元测试与unittest框架详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 单元测试的定义 1. 什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&…

快来看,图书《人工智能怎么学》电子书上线啦!

图书《人工智能怎么学》出版后&#xff0c;受到了读者们的喜爱&#xff0c;被读者们亲切的称为“人工智能宝典”。不少读者留言说书籍具有很强的检索功能&#xff0c;想学人工智能的某些知识时&#xff0c;通过查阅此书&#xff0c;很方便就能够找到相关的著名教材、精品课程、…

【网易低代码】第3课,页面表格删除功能

你好&#xff01; 这是一个新课程 CodeWave网易低代码 通过自然语言交互式智能编程&#xff0c;同时利用机器学 习&#xff0c;帮助低代码开发者进一步降低使用门槛、提高应用开发效率 【网易低代码】第3课&#xff0c;页面表格删除功能 1.拖拽组件link链接到表格中&#xff0c…

航空航天混合动力(2)电动飞机发展中的电气连接挑战

航空航天混合动力(2)电动飞机发展中的电气连接挑战 1.概述2.更高的电压(千伏)和功率(兆瓦)2.缓解局部放电/电晕效应3.提高可靠性,更恶劣的环境,频繁的维护和检查,冲击和振动4.减重5.抗电弧跟踪和液压油阻力6.严格的可燃性,毒性和烟雾要求7.海拔和气压的影响8.工作温度范围…

RSA 非对称加密工具类

目录 Maven依赖RSA 非对称加密工具类效果图 Maven依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.31</version></dependency>RSA 非对称加密工具类 import cn.hutool.core.c…

100个候选人,没一个能讲明白什么是自动化框架?

什么是自动化测试框架 01 什么是框架 框架是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法。它规定了应用的体系结构&#xff0c;阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程&#xff0c;表现为一组抽象类以及其实例之间…

AntSKPro AI知识库一体机:深度解析RTX 4060 8G与RTX 3060 12G在大模型处理中的性能优劣势

1. 架构与性能 RTX 4060 8G&#xff1a;基于NVIDIA的较新架构&#xff0c;可能提供更高的计算效率和更先进的功能&#xff0c;如更高效的光线追踪和AI处理能力。RTX 3060 12G&#xff1a;虽然是基于较早的架构&#xff0c;但拥有更大的显存容量&#xff0c;对于处理大型数据集…