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://xiahunao.cn/news/3266625.html

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

相关文章

pytorch-梯度下降

梯度下降 y x 2 ∗ s i n ( x ) y ′ 2 x s i n x x 2 c o s x x 1 x − Δ y ′ ( x ) 其中 Δ 表示学习率&#xff0c; y ′ ( x ) 代表 y 在 x 点处关于 x 的梯度。 y x^2 * sin(x) \\ y 2xsinxx^2cosx \\ x_1 x - \Delta y(x) \\ 其中 \Delta 表示学习率&#xff0c…

nginx 启动 ssl 模块

文章目录 前言nginx 启动 ssl 模块1. 下载2. 启动 ssl 模块 步骤3. 验证前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!! nginx 启动 ssl 模块 1. 下载 下载…

土耳其云手机提升TikTok电商效率

在数字化飞速发展的今天&#xff0c;TikTok不仅是一个社交平台&#xff0c;更是一个巨大的电商市场。随着TikTok电商功能在全球范围内的扩展&#xff0c;土耳其的商家和内容创作者正面临着前所未有的机遇。本文将详细介绍土耳其云手机怎样帮助商家抓住机遇&#xff0c;实现业务…

vscode回退不显示了,不方便操作

一、后退前进按钮 顶部显示&#xff0c;方便调试 <—— ——> 文件-> 首选项 -> 设置->commandcenter->勾选 Window: Title Bar Style->custom 将native —>custom

Pytorch使用教学4-张量的索引

1 张量的符号索引 张量也是有序序列&#xff0c;我们可以根据每个元素在系统内的顺序位置&#xff0c;来找出特定的元素&#xff0c;也就是索引。 1.1 一维张量的索引 一维张量由零维张量构成 一维张量索引与Python中的索引一样是是从左到右&#xff0c;从0开始的&#xff…

MSP430M03507最小系统板的keil环境搭配,用keil编辑ti单片机

转载自嘉立创MSP430M03507开发手册 这篇文章只是因为我的keil版本与嘉立创的不一样&#xff0c;所以添加了我自己遇到的问题解析 先说说为什么要用keil编辑&#xff0c;因为ti单片机自己的ccs编译环境需要对应仿真器&#xff0c;那个加芯片都240了&#xff0c;哪有那么多钱买…

谷粒商城实战笔记-踩坑-跨域问题

一&#xff0c;When allowCredentials is true, allowedOrigins cannot contain the special value “*” since that cannot be set on the “Access-Control-Allow-Origin” response header. To allow credentials to a set of origins, list them explicitly or consider u…

华东科技杂志华东科技杂志社华东科技编辑部2024年第12期目录

主编的话 造梦国际创新科技之“港” 李岩; 5 焦点 华东视界 6-7 焦点_产业风暴 新材料 8 前沿产品 8 人工智能 9 电子信息 9 生物医药 9 焦点_科技人物 Demis Hassabis&#xff1a;界定AI角色 李冲; 10-15 观点_专题策划 沪港科创“乘数效…

uniapp开发精选短视频视频小程序实战笔记20240725,实现顶部轮播图和热门短剧

创建项目 创建项目,叫video_app。 在pages.json里面修改一下标题: 新建search搜索页面和me我的页面。 此时界面预览效果如下: 引入静态资源 主要是static里面的内容,全部复制过来。 配置底部导航栏 pages.json,放到顶层,和全部样式同级: "tabBar&quo…

基于OSS前端直传的分片上传以及断点续传

一、大文件分片上传 原型 大文件如果直接上传的话由于nginx的限制会导致响应500报错&#xff0c;或者响应时间过长导致响应超时 并且大文件上传有如下缺点 上传时间长: 对于大文件&#xff0c;直接上传可能需要较长时间&#xff0c;特别是在网络速度较慢或不稳定的情况下。这…

演出票务代理需要办理哪些资质?

疫情开放之后&#xff0c;演出行业应该当属今年最火的行业了&#xff0c;你看看今年各地举办的演唱会&#xff0c;光上海今年要举办177场、北京106场、广州94场等&#xff0c;经统计&#xff0c;全国上半年演唱会场次总和为500多场&#xff0c;而下半年已开、待开的演唱会竟达1…

手机怎么设置不同的ip地址

在数字化日益深入的今天&#xff0c;智能手机已成为我们生活、工作和学习中不可或缺的设备。然而&#xff0c;随着网络应用的广泛和深入&#xff0c;我们有时需要为手机设置不同的IP地址来满足特定需求。比如&#xff0c;避免网络限制、提高网络安全、或者进行网络测试等。本文…

ROM修改进阶教程------修改rom 开机自动安装指定apk 自启脚本完整步骤解析

rom修改的初期认识 在解包修改系统分区过程中。很多客户需求刷完rom后自动安装指定apk。这种与内置apk有区别。而且一些极个别apk无法内置。今天对这种修改rom刷入机型后第一次启动后自动安装指定apk的需求做个步骤解析。 在前期博文中我有做过说明。官方系统固件解…

ChatGPT的原理和成本

ChatGPT就是人机交互的一个底层系统&#xff0c;某种程度上可以类比于操作系统。在这个操作系统上&#xff0c;人与AI之间的交互用的是人的语言&#xff0c;不再是冷冰冰的机器语言&#xff0c;或者高级机器语言&#xff0c;当然&#xff0c;在未来的十来年内&#xff0c;机器语…

喜讯!云起无垠入选《嘶吼2024网络安全产业图谱》

近日&#xff0c;嘶吼安全产业研究院正式发布了《嘶吼2024网络安全产业图谱》&#xff0c;旨在全面展示网络安全产业的构成及其重要组成部分&#xff0c;探索网络安全产业的竞争格局和发展前景。云起无垠凭借技术创新和行业影响力荣膺入选&#xff0c;证明了公司在网络安全领域…

经纬恒润与奇瑞汽车签订新能源项目重点供应商合作协议,共同开启合作新篇章

近日&#xff0c;2024年国家级芜湖经开区汽车零部件生态大会成功举行&#xff0c;经纬恒润受邀出席&#xff0c;与行业各伙伴齐聚经开区&#xff0c;同绘发展蓝图&#xff0c;助力经开区汽车产业高质量发展。会上&#xff0c;经纬恒润与奇瑞汽车签署合作协议&#xff0c;成为奇…

网络通信应用层协议-序列化与反序列化

目录 1、序列化与反序列化概念 2、正、反序列化的目的 3、添加报头的目的 4、实现正、反序列化思路 5、代码实现 6、添加报头、去除报头 结语 前言&#xff1a; 在进行网络通信时&#xff0c;应用层协议是需要程序员手动定制的&#xff0c;序列化与反序列化是对协议进…

vue3前端开发-小兔鲜项目-产品详情基础数据渲染

vue3前端开发-小兔鲜项目-产品详情基础数据渲染&#xff01;这一次内容比较多&#xff0c;我们分开写。第一步先完成详情页面的基础数据的渲染。然后再去做一下右侧的热门产品的列表内容。 第一步&#xff0c;还是老规矩&#xff0c;先准备好接口函数。方便我们的页面组件拿到对…

新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题

苹果CMS2022新版海螺影视主题M3.1版本&#xff0c;这个主题我挺喜欢的&#xff0c;之前也有朋友给我提供过原版主题&#xff0c;一直想要破解但是后来找了几个SG11解密的大哥都表示解密需要大几百大洋&#xff0c;所以一直被搁置了。这个版本是完全解密的&#xff0c;无需SG11加…

Java Selenium WebDriver:代理设置与图像捕获

在网络爬虫和自动化测试领域&#xff0c;Selenium WebDriver 是一个非常流行的工具&#xff0c;它允许开发者模拟用户在浏览器中的操作。然而&#xff0c;出于安全或隐私的考虑&#xff0c;有时我们需要通过代理服务器来发送请求。本文将介绍如何在Java环境中使用Selenium WebD…