Nacos真香,从零到一学起来

简介: Nacos真香,从零到一学起来

Nacos是阿里巴巴开源的微服务管理平台,可以帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。

篇文章主要来讲一下Nacos作为配置中心和注册中心的使用。

1 安装

1.1 linux下安装

首先搭建一套单机版的Nacos集群。Nacos的安装有两种方式,一种是下载源码自己编译安装,另一种是下载编译后的压缩包解压后直接使用。本文我采用第二种方式。首先从官网下载安装包,下载地址如下:

https://github.com/alibaba/nacos/releases/tag/2.0.2

linux下安装可能会遇到环境变量的问题,可以参考这篇文章[1]如果还不行,执行下面两个命令重新安装:

yum erase java-1.* #删除原来的jdk
yum install java-1.8.0-openjdk* -y #重新安装jdk

jdk没有问题后,启动Nacos,启动日志如下:

[root@master bin]# sh startup.sh -m standalone
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/bin/java  -Xms512m -Xmx512m -Xmn256m -Dnacos.standalone=true -Dnacos.member.list= -Djava.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/jre/lib/ext:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.x86_64/lib/ext -Xloggc:/root/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/root/nacos/plugins/health,/root/nacos/plugins/cmdb -Dnacos.home=/root/nacos -jar /root/nacos/target/nacos-server.jar  --spring.config.additional-location=file:/root/nacos/conf/ --logging.config=/root/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with standalone
nacos is starting,you can check the /root/nacos/logs/start.out

1.2 可视化界面

浏览器输入下面地址:

http://192.168.59.151:8848/nacos/index.html#/login

登录界面如下:

微信图片_20221212204449.png

账号/密码:nacos/nacos,登录成功后如下图:

微信图片_20221212204510.png

配置中心

Nacos可以方便地跟Spring、SpringBoot、SpringCloud、Docker、Dubbo、k8s等整合,本文主要使用SpringCloud来整合Nacos。

2.1 代码配置

1. 在配置文件中加入下面的依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${latest.version}</version>
</dependency>

根据官网介绍,这里的 latest.version 对应 springboot 版本,比如 Nacos 2.1.x.RELEASE 版本对应 SpringBoot 2.1.x 版本,Nacos 2.0.x.RELEASE 版本对应 SpringBoot 2.0.x 版本。但x这个子版本号不一定要完全匹配,上面latest.version我本地SpringBoot使用2.1.6,Nacos使用2.1.4。

2. 添加一个bootstrap.properties文件,跟SpringBoot的配置文件放在一个目录下,在这个文件中增加下面配置:

#Nacos server地址
spring.cloud.nacos.config.server-addr=192.168.59.151:8848
#配置前缀,如果不配置,默认是spring.application.name
spring.cloud.nacos.config.prefix=example
#dataId后缀
spring.cloud.nacos.config.file-extension=properties

在SpringCloud整合Nacos时,Nacos的dataId完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

这里有两点需要注意:

  • spring.profiles.active即为当前环境对应的 profile

当 spring.profiles.active 为空时,对应的连接符-也将不存在,dataId的拼接格式变成 ${prefix}.${file-extension}

  • file-exetension为配置内容的数据格式,目前只支持properties和yaml类型。


上面的配置,对应的 dataId 为 example-dev.properties。

2.2 测试配置

如果要实现配置自动刷新,只需要在代码类上加一个注解@RefreshScope,如下面这段代码来自官网:

@Controller
@RequestMapping("config")
@RefreshScope
public class ConfigController {
    @Value("${useLocalCache:false}")
    private boolean useLocalCache;
    @RequestMapping(value = "/get", method = GET)
    @ResponseBody
    public boolean get() {
        return useLocalCache;
    }
}

这时往Nacos写入一个配置,命令如下:

curl -X POST "http://192.168.59.151:8848/nacos/v1/cs/configs?dataId=example-dev.properties&group=DEFAULT_GROUP&content=useLocalCache=true"

这时进入Nacos页面,可以看到上面插入的配置,如下图:

微信图片_20221212204542.png

点击"详情",可以看到配置数据,如下图:

微信图片_20221212204607.png

这时如果使用api调用上面ConfigController的get方法,会返回true。如果使用下面的命令修改useLocalCache的值,再次调用get方法,会返回false。

curl -X POST "http://192.168.59.151:8848/nacos/v1/cs/configs?dataId=example-dev.properties&group=DEFAULT_GROUP&content=useLocalCache=false"

点击下图的示例代码,可以看到获取配置的代码,也就是上面Controller的代码。

微信图片_20221212204636.png

3 注册中心

3.1 配置服务提供者

1. 在pom文件中增加配置,如下:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>${latest.version}</version>
</dependency>

根据官网介绍,这里的latest.version对应springboot版本,比如Nacos 2.1.x.RELEASE版本对应SpringBoot 2.1.x版本,Nacos 2.0.x.RELEASE版本对应SpringBoot 2.0.x版本。这里我本地SpringBoot使用2.1.6,上面latest.version使用2.1.4。2. 在application.properties中增加下面配置:

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

3. 在SpringBoot启动类上加上注解@EnableDiscoveryClient。

4. 为了区分服务名称,配置服务名称如下:

spring.application.name=springboot-producer

3.2 配置服务调用者

跟服务提供者配置类似,这里修改配置名称如下:

spring.application.name=springboot-consumer

3.3 测试

启动上面两个服务,登录Nacos页面,可以看到两个服务已经注册到Nacos。

微信图片_20221212204746.png

在springboot-producer中增加一个Controller,代码如下:

@Controller
@RequestMapping("/producer")
public class FeignTestController {
    @RequestMapping("/result")
    @ResponseBody
    public String getResult() throws InterruptedException {
        return "success";
    }
}

在springboot-consumer中增加Feign调用,如下:

@FeignClient(value = "springboot-producer", configuration = FeignMultipartSupportConfig.class)
public interface FeignAsEurekaClient {
    @GetMapping("/producer/result")
    String feignReadTimeout();
}

启动测试类,调用成功,返回"success"。

4 一个问题

由于我本地应用使用的数据库连接池是Hikaricp,修改配置中心的配置,通知本地应用时会报notify-error,日志上看是绑定数据库参数失败。这里应该改成druid连接池就可以了,有待验证。

相关文章
|
机器学习/深度学习 网络架构 人工智能
AI - MoE(Mixture-of-Experts)结构
AI - MoE(Mixture-of-Experts)结构
629 1
|
弹性计算 Prometheus 运维
一文详解阿里云可观测体系下标签最佳实践
在当今数字化转型加速的时代,企业 IT 系统的复杂度与日俱增,如何高效地管理和监控这些系统成为了一项挑战。阿里云作为全球领先的云计算服务商,提供了一整套全面的可观测性解决方案,覆盖从业务、端侧(小程序、APP、H5 等)、应用、中间件、容器/ECS 等全栈的监控体系,旨在帮助企业构建强大而灵活的可观测性体系。其中,标签(Tag)作为一种核心组织和管理手段,在阿里云可观测体系中扮演着至关重要的角色。本文将深入探讨阿里云可观测系列产品中标签的应用,以及如何运用标签在阿里云可观测产品体系下进行体系化建设并给出相关最佳实践。
1133 198
|
物联网 开发工具 Android开发
《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS产生的背景
HarmonyOS是华为自主研发的分布式操作系统,旨在应对美国“实体清单”带来的技术封锁。2019年首次亮相,它不仅支持手机、平板等多终端设备,还通过统一的软件系统解决了不同设备间的体验割裂问题。HarmonyOS强调全场景智能互联,提升设备间的安全性和协同能力。其商用版本基于OpenHarmony开源项目开发,而HarmonyOS NEXT则是去除了AOSP代码的纯自研版本,代表了未来发展方向。
729 12
|
弹性计算 关系型数据库 持续交付
ROS 模板指南
资源编排服务ROS(Resource Orchestration Service)是阿里云提供的一项简化云计算资源管理和采用基础设施即代码(IaC)设计理念的自动化部署服务。开发者和管理员可以编写模板,在模板中定义所需的阿里云资源(例如:ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,从而实现云上资源的自动化部署。
1489 4
ROS 模板指南
|
数据可视化 数据挖掘 BI
QuickBI全新高亮联动功能,引爆数据交互新体验!
本文介绍了高亮联动在BI系统中的应用,包括其定义、用途及实现方案。高亮联动通过用户在某个组件上的操作,自动在其他组件中高亮显示相关数据,帮助用户快速识别数据间的关联性。文中详细解释了筛选联动与高亮联动的区别,并展示了具体的实现步骤和图表结构。通过技术创新和用户体验优化,高亮联动功能将为用户提供更高效、直观的数据分析工具。
486 0
|
9月前
|
机器学习/深度学习 算法 API
淘宝图片搜索商品列表API接口全攻略
淘宝图片搜索API(拍立淘)通过上传图片快速检索淘宝/天猫相似商品,支持标题、价格、销量等信息返回。核心功能包括以图搜图、商品筛选和分页查询,具备高效性、准确性和多语言支持。开发者需注册账号、创建应用并申请权限后调用接口,适用于电商平台、比价工具等场景。
|
存储 Android开发 iOS开发
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
511 0
|
数据采集 存储 算法
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索20页论文及Python代码
本文介绍了2024年泰迪杯B题的解决方案,该题目要求构建基于多模态特征融合的图像文本检索模型和算法,通过深入分析和预处理数据集,构建了OFA、BertCLIP和ChineseCLIP三种多模态特征融合模型,并通过投票融合机制优化检索效果,实验结果表明所提模型在图像与文本检索任务中显著提高了检索准确性和效率。
394 3
|
Kubernetes Go 网络架构
Golang热重载和优雅地关闭
Golang热重载和优雅地关闭
|
消息中间件 网络协议 Dubbo
从java BIO到NIO再到多路复用,看这篇就够了
本文从基础概率到引出业界通用c10k问题,然后通过代码演示从BIO,到NIO再到多路复用的演进历程
7687 5
从java BIO到NIO再到多路复用,看这篇就够了