nacos2.x作为配置中心和服务注册和发现以及springcloud使用

目录

一、nacos是什么

二、windows下安装配置nacos

1、准备

2、安装nacos

3、配置nacos

4、启动并且访问nacos

三、springcloud使用nacos作为配置中心

四、springcloud使用nacos进行服务注册与发现

五、springcloud使用nacos进行服务消费

六、nacos的一些高级配置

1.临时实例和持久实例

2.保护阈值

3.NacosRule

4.Cluster就近访问

5.订阅者列表

七、nacos使用中遇到的一些报错以及解决方法

1.没有配置dataId

2.不可以使用进行服务使用


来都来了点个赞收藏一下再走呗~~~🌹🌹🌹🌹🌹

一、nacos是什么

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

nacos主要功能:

  1. 服务发现:Nacos 支持服务的注册与发现,服务实例可以动态地加入或退出集群,服务消费者可以通过Nacos服务发现机制快速地获取到服务提供者的访问地址。
  2. 配置管理:Nacos 提供统一的配置管理平台,支持配置的统一管理、统一推送、统一生效等功能。
  3. 服务健康监测:Nacos 提供服务健康监测功能,可以实时监测服务实例的健康状况,及时发现并处理服务故障。
  4. 动态服务路由:Nacos 支持动态服务路由,可以根据服务实例的负载情况动态地调整服务路由策略,提高系统的可用性和扩展性。
  5. 高可用性:Nacos 支持集群模式部署,通过集群节点之间的数据同步和故障转移机制,保证服务的高可用性。

二、windows下安装配置nacos

1、准备

1.JDK环境

2.Mysql环境

3.Maven环境

2、安装nacos

nacos官网地址:https://github.com/alibaba/nacos/releases

当然nacos是在git上的可能会下载有点慢这个地方我也给出nacos的百度网盘下载链接: https://pan.baidu.com/s/1PYKdPX5P2E3WbOFYADl_gQ?pwd=t6uz 提取码: t6uz 

解压nacos-2.2.3.rar文件到你自己的环境目录下,如下所示:

3、配置nacos

1、配置数据库

①、创建数据库:create database nacos_config character set utf8mb4 collate utf8mb4_general_ci;

②、导入数据:参见nacos根目录\conf\mysql-schema.sql文件,在nacos_config数据库下执行此sql文件

2、配置nacos

编辑“nacos根目录\conf\application.properties”—>打开文件—>将下面配置放到application.properties文件末尾—>保存并关闭该文件

#***********************************MySql*************************************
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root

4、启动并且访问nacos

启动Dos窗口,执行如下命令:

cd nacos根目录\bin
startup.cmd -m standalone

说明: Nacos 默认以集群模式启动。

访问nacos

启动浏览器—>访问http://localhost:8848/nacos/,如下所示:

三、springcloud使用nacos作为配置中心

首先在nacos中先新增一条配置:

新建配置,新建完点击发布:

一些概念的定义:

dataId

  • 定义dataId 是配置项的唯一标识符。

  • 作用:在 Nacos 中,每个配置项都有一个唯一的 dataId,它用于区分不同的配置项。dataId 通常由应用名、配置项名和配置的扩展名组成,例如:myapp.properties

  • 使用场景

    • 在服务发现中,dataId 可以用于唯一标识一个服务实例。

    • 在配置管理中,dataId 用于检索和更新配置项。

group

  • 定义group 是配置项的分组标识符。

  • 作用group 用于将相关的配置项组织在一起,方便管理和检索。不同的 group 可以包含不同的配置项,从而实现逻辑上的分组。

  • 使用场景

    • 在服务发现中,group 可以用于区分不同服务的实例,例如,可以将一个应用的不同服务实例放在不同的 group 中。

    • 在配置管理中,group 可以用于将相关的配置项组织在一起,便于管理和检索。

命名空间

  • 定义:命名空间是 Nacos 中的一个逻辑隔离环境,用于区分不同的环境或应用。

  • 作用:命名空间允许用户在同一个 Nacos 集群中管理多个不同的环境或应用的配置和服务发现信息,而不会相互干扰。

springcloud使用nacos配置,pom.xml文件引入依赖,引入spring-cloud-starter-bootstrap的原因是springboot项目启动不会默认加载bootstrap文件。

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.8.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.3</version>
</dependency>
bootstrap.properties文件
#nacos服务器地址
spring.cloud.nacos.server-addr=127.0.0.1:8848
#对应去找那个nacos的dataId
spring.application.name=test

 controller层,获取配置并且显示

package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;@RefreshScope
@RestController
public class testController {@Value("${spring.username}")private String username;@GetMapping("test")public String test(){return username;}}

注解说明 :
@RefreshScope 此注解配置的目的是让nacos的配置可以自动刷新
@Value("${spring.username}") 此注解的目的,大家应该都知道就是做配置获取值的 

 测试:启动springboot项目---》在浏览器中访问localhost:8080/test ,我们可以得到结果如下图所示:

并且你可以在nacos中更新配置看看自动属性配置是否生效,这个地方我就不演示了,可以自己去尝试一下。

四、springcloud使用nacos进行服务注册与发现

第一步:需要在 pom.xml 文件中引入 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-nacos-discovery 的 starter:

<!--服务注册-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.8.RELEASE</version
</dependency>

 第二步:添加应用配置:在应用的 /src/main/resources/application.properties 配置文件中配置 Nacos Server 地址(当然如果你做了配置中心的话这个地方就可以不用在加了):

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

第三步:使用 @EnableDiscoveryClient 注解开启服务注册与发现功能:

@SpringBootApplication
@EnableDiscoveryClient
public class Demo4Application {public static void main(String[] args) {SpringApplication.run(Demo4Application.class, args);}}

 第四步:启动服务并且在nacos可视化界面验证,服务是否注册成功,这个地方的服务名也就是在bootstrap.propertes中设置的spring.application.name=test。

至此我们就学会了最简单的服务注册功能了。 

五、springcloud使用nacos进行服务消费

第一步:新建一个springboot项目作为consumer消费者,并且引入pom.xml文件依赖如下:

        <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.8.RELEASE</version></dependency><!--服务注册--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.8.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.3</version></dependency>

第二步:编写bootstrap.properties文件,文件内容也就是把consumer注册到nacos服务端中,如下所示 :

# 应用服务 WEB 访问端口
server.port=7070spring.cloud.nacos.server-addr=127.0.0.1:8848
spring.application.name=consumer
spring.cloud.loadbalancer.nacos.enabled=true

第三步:引入RestTemplate,并且注入到springboot的bean中,代码如下所示:

package com.ltx.nacosconsumer.demos.config;import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;@Component
public class RestTemplateConfig {@Bean@LoadBalanced   //负载均衡public RestTemplate restTemplate() {return new RestTemplate();}
}

第四步:编写controller并且调用provider中的方法

package com.ltx.nacosconsumer.demos.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;@RestController
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/test")public String test() {return restTemplate.getForObject("http://provider/t", String.class);}
}

注意的是我们provider也就是我最先编写的那个test把spring.application.name=provider,改名得到的 ,改名了之后记得把配置中心里面的dataId也要改一下,并且在provider中的controller如下所示;

package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RefreshScope
@RestController
public class testController {@Value("${spring.username}")private String username;@GetMapping("/t")public String t(){return "恭喜您测试成功啦!";}
}

第五步:浏览器测试访问,localhost:7070/test ,结果如下所示:

六、nacos的一些高级配置

1.临时实例和持久实例

其实实际上的持久实例和临时实例就差了一个注解只需要实现下面的注解就可以变成持久实例了

spring.cloud.nacos.discovery.ephemeral=false

因为之前的provider是临时实例所以我们直接加上注解就会报错

解决此问题我们需要去删掉nacos中的文件,\nacos\data\protocol\raft\naming_instance_metadata 下的文件全部删掉就可以了(在执行删除文件的操作之前需要把nacos的服务停止)

重新启动nacos,并且把刚刚配置的持久实例启动起来。我们可以发现这个时候服务就变成持久实例了。如图所示:

当然这个时候我们也可以停掉刚刚的持久实例我们就可以知道为什么是叫做持久实例了

因为是持久实例所以不会在我们听到此服务的时候就直接的删除实例

临时实例和持久化实例的区别

临时实例与持久化实例的区别主要体现在服务器对该实例的处理上。

临时实例向Nacos注册,Nacos不会对其进行持久化存储,只能通过心跳方式保活。默认模式是:客户端心跳上报Nacos实例健康状态,默认间隔5秒,Nacos在15秒内未收到该实例的心跳,则会设置为不健康状态,超过30秒则将实例删除。

持久化实例向Nacos注册,Nacos会对其进行持久化处理。当该实例不存在时,Nacos只会将其健康状态设置为不健康,但并不会对将其从服务端删除。

2.保护阈值

保护阈值的主要作用是防止健康实例因负载过高而被压垮。通过设置保护阈值,即使部分实例不健康,也可以将流量分散到所有实例中,从而避免健康实例因负载过高而崩溃

我举一个例子来说就是,如果我本来我这个服务上注册了100个实例,而且我设置的保护阈值是0.2,当我机器挂掉80台的时候就会触发保护阈值,这个时候当用户访问的时候,也是会从这100个实例中去访问采用随机或者权重的方式访问这些实例,虽然有些访问到80个挂了的机器上的实例时,不会得到结果,但是可以保证20个实例不会因为过高的并发而导致挂掉整个系统完全不可以用的情况发生。

保护阈值配置如下所示:

3.NacosRule

在 Nacos 中,NacosRule 是一个用于定义服务路由规则的类。它主要用于实现服务的智能路由,包括流量控制、权重分配、服务保护等功能。

4.Cluster就近访问

在 Nacos 中,Cluster(集群)就近访问是一种服务发现和路由策略,旨在优化服务调用的性能和响应时间。通过将请求路由到距离客户端最近的服务实例,可以减少网络延迟,提高响应速度。

只需要在服务注册的时候加上配置就好了,但是在服务器要使用的时候也需要加上配置就可以指定近距离的先使用。

spring.cloud.nacos.config.cluster-name=bj

5.订阅者列表

通过订阅者列表查询我们可以简单的就知道有哪些ip地址的人访问过ip地址了

七、nacos使用中遇到的一些报错以及解决方法

1.没有配置dataId

报错如下所示

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.testController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.username' in value "${spring.username}"
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1425) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.2.15.RELEASE.jar:5.2.15.RELEASE]

此报错是因为找不到配置,因为没有正确的配置dataId就不知道去找哪个配置,所以就会出现找不到 spring.username,所以我们在需要使用到nacos作为配置中的时候一定要注意配置dataId

2.不可以使用进行服务使用

因为可能在高版本的nacos中springcloud并没有很好的兼容,就会出现一个情况你并不可以直接使用@LoadBalanced这个注解进负载均衡的配置,就会导致你可以使用RestTemplate中的方法,但是不可以使用服务名进行动态的帮你负载均衡,比如我之前使用到的2021.0.5版本的就用不了。

解决方法:降低或者重新选择版本进行尝试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50217.shtml

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

相关文章

Ubuntu上编译多个版本的frida

准备工作 Ubuntu20(WSL) 略 安装依赖 sudo apt update sudo apt-get install build-essential git lib32stdc-9-dev libc6-dev-i386 -y nodejs 去官网[1]下载nodejs&#xff0c;版本的话我就选的20.15.1&#xff1a; tar -xf node-v20.15.1-linux-x64.tar.xz 下载源码 …

AbutionGraph时序(流式)图数据库开发文档地址

AbutionGraph-时序(流式)图数据库&#xff0c;官方开发文档(API)地址&#xff1a; http://www.thutmose.cn

JavaSE从零开始到精通(九) - 双列集合

1.前言 Java 中的双列集合主要指的是可以存储键值对的集合类型&#xff0c;其中最常用的包括 Map 接口及其实现类。这些集合允许你以键值对的形式存储和管理数据&#xff0c;提供了便捷的按键访问值的方式。 2. HashMap HashMap 是基于哈希表实现的 Map 接口的类&#xff0c…

java算法day23

java算法day23 121买卖股票的最佳时机55 跳跃游戏45 跳跃游戏Ⅱ763划分子母区间 121买卖股票的最佳时机 最容易想的应该就是两个for暴力枚举。但是超时 本题用贪心做应该是最快的。 先看清楚题&#xff0c;题目要求在某一天买入&#xff0c;然后在某一天卖出&#xff0c;要求…

MarkTool集合篇

MarkTool目前包含以下几种工具 1、TCP客户端 2、TCP服务端 3、UDP客户端 4、Web客户端 5、Web服务端 6、串口网口 7、PLC 8、获取本机设备 9、Log 10、密钥 11、系统设置 11-1、基本设置 11-2、角色设置 11-3、用户设置 11-4、log记录 开启软件需要找我解密&#…

S7-1200PLC通过111报文和EPOS模式实现位置轴轴控功能(FB284封装)

EASY_SINA_POS的详细使用介绍请参考下面文章链接: S7-1200PLC使用标准报文111和EPOS模式实现V90 PN总线伺服定位(Easy_SINA_Pos)_西门子sinapos-CSDN博客文章浏览阅读132次。文章浏览阅读7k次。先简单说下如何获取FB284,一般有2种方法,Startdrive软件可以操作大部分西门子的…

PostgreSQL使用(四)——数据查询

说明&#xff1a;对于一门SQL语言&#xff0c;数据查询是我们非常常用的&#xff0c;也是SQL语言中非常大的一块。本文介绍PostgreSQL使用中的数据查询&#xff0c;如有一张表&#xff0c;内容如下&#xff1a; 简单查询 --- 1.查询某张表的全部数据 select * from tb_student…

【Qt】QLabel常用属性相关API

QLabel是Qt框架中用于显示文本或图案的小部件。在Qt应用程序中&#xff0c;QLabel是用来呈现静态文本或图像给用户的重要部分 QLabel属性陈列 属性说明textQLabel中的文本内容textFormat 文本的格式 Qt::PlainText 纯文本Qt::RichText 富文本Qt::MarkdownText markdown…

【数据结构】排序算法(冒泡排序、插入排序、希尔排序、选择排序、堆排序、计数排序)

生命不可能有两次&#xff0c;但许多人连一次也不善于度过。&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;排序的概念和应用 • &#x1f330;1.排序及其概念 • &#x1f330;2.排序的应用 • &#x1f330;3.常见的排序算…

qt做的分页控件

介绍 qt做的分页控件 如何使用 创建 Pagination必须基于一个QWidget创建&#xff0c;否则会引发错误。 Pagination* pa new Pagination(QWidget*);设置总页数 Pagination需要设置一个总的页数&#xff0c;来初始化页码。 pa->SetTotalItem(count);设置可选的每页数量…

前端养成记-实现一个低配版简单版本的vue3表单自定义设计组件

简介&#xff1a; 通过使用了最新的vue3,vite2,TypeScript等主流技术开发&#xff0c;并配合使用vuedraggable 插件以及antd design vue 组件库实现低配版本的自定义表单设计组件&#xff1b; 项目地址&#xff1a;https://gitee.com/hejunqing/vue3-antdv-generator

PyTorch模型训练步步详解:从零开始构建深度学习流程

P y T o r c h 训练模型流程图 PyTorch训练模型流程图 P y T orc h 训练模型流程图

非凸T0算法,如何获取超额收益?

什么是非凸 T0 算法&#xff1f; 非凸 T0 算法基于投资者持有的股票持仓&#xff0c;利用机器学习等技术&#xff0c;短周期预测&#xff0c;全自动操作&#xff0c;抓取行情波动价差&#xff0c;增厚产品收益。通过开仓金额限制、持仓时长控制等&#xff0c;把控盈亏风险&…

学习笔记:MySQL数据库操作5

1. 触发器&#xff08;Triggers&#xff09; 触发器是数据库的一种高级功能&#xff0c;它允许在执行特定数据库操作&#xff08;如INSERT、UPDATE、DELETE&#xff09;之前或之后自动执行一段代码。 1.1 创建商品和订单表 商品表&#xff08;goods&#xff09; gid: 商品编号…

会话存储、本地存储,路由导航守卫、web会话跟踪、JWT生成token、axios请求拦截、响应拦截

1、会话存储、本地存储 前端浏览器中存储用户信息&#xff0c;会话存储、本地存储、cookie 会话存储&#xff08;sessionStorage&#xff09;&#xff1a;会话期间存储&#xff0c;关闭浏览器后&#xff0c;数据就会销毁 sessionStorage.setItem("account",resp.d…

反射型与dom型的xss的区别【源码分析】

反射型 XSS 和 DOM 型 XSS 都属于跨站脚本攻击 (XSS) 的类型&#xff0c;它们的共同点是均能通过注入恶意脚本在用户浏览器中执行&#xff0c;不同点是dom型xss不经过服务器&#xff0c;而反射型是经过服务器的。但是&#xff0c;它们在攻击方式、执行过程和防御措施上有所不同…

Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类

目录 HTTP协议 什么是HTTP协议 HTTP协议的特点 请求的HTTP协议格式 GET请求 POST请求 常用的请求头说明 哪些是GET请求&#xff0c;哪些是POST请求 响应的HTTP协议格式 常见的响应码说明 MIME类型说明 HttpServletRequest类 作用 常用方法 如何获取请求参数 po…

IP 泄露: 原因与避免方法

始终关注您的IP信息&#xff01; 您的IP地址不仅显示您的位置&#xff0c;它包含几乎所有的互联网活动信息&#xff01; 如果出现IP泄漏&#xff0c;几乎所有的信息都会被捕获甚至非法利用&#xff01; 那么&#xff0c;网站究竟如何追踪您的IP地址&#xff1f;您又如何有效…

从0开始的STM32HAL库学习9

定时器输入捕获测频率 生成待测信号 配置环境 选择如上图所示 代码修改 在main函数中加入 HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); 测量信号频率 配置环境 如图所示打开TIM3定时器 1. 设置TI1FP1为ResetMode,即清空计数 2. 使用内部时钟 3. 通道 1 设置为输…

日本的便利店真的“无所不能”?!简直不要太方便了

众所周知&#xff0c;日本便利店可谓是日本人离不来的存在了&#xff01;真真是“要啥有啥”&#xff0c;可以说日本的便利店才是真正意义上的“便利”~ 那日本的便利店到底有什么与众不同呢&#xff1f;&#xff1f;今天小编来带大家盘点一下日本便利店的那些服务。 一、购票…