云原生之快速使用Nacos Spring Cloud

news2024/11/30 10:38:51

本文主要面向 Spring Cloud 的使用者,通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理和服务注册发现。

  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
  • 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。

前提条件

您需要先下载 Nacos 并启动 Nacos server。

window系统启动命令,需要在nacos文件夹的bin命令行启动

startup.cmd -m standalone

启动配置管理 

启动了 Nacos server 后,您就可以参考以下示例代码,为你的 Spring Cloud 应用启动 Nacos 配置管理服务了

1.添加依赖:

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

注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。 

2.在 bootstrap.properties 中配置 Nacos server 的地址和应用名

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

spring.application.name=example

说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

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

 prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

3.通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
        return useLocalCache;
    }
}

4. 首先通过调用 Nacos Open API 向 Nacos Server 发布配置

dataId 为example.properties,内容为useLocalCache=true

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

5.运行 NacosConfigApplication

调用 curl http://localhost:8080/config/get,返回内容是 true。

6.再次调用 Nacos Open API 向 Nacos server 发布配置

dataId 为example.properties,内容为useLocalCache=false

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

7.再次访问 http://localhost:8080/config/get

此时返回内容为false,说明程序中的useLocalCache值已经被动态更新了 

 启动服务发现

通过实现一个简单的 echo service 演示如何在您的 Spring Cloud 项目中启用 Nacos 的服务发现功能,如下图示:

1.添加依赖:

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

注意:版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。

更多版本对应关系参考:版本说明 Wiki

2.配置服务提供者

从而服务提供者可以通过 Nacos 的服务注册发现功能将其服务注册到 Nacos server 上。 

i. 在 application.properties 中配置 Nacos server 的地址:

server.port=8070
spring.application.name=service-provider

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

ii. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

	public static void main(String[] args) {
		SpringApplication.run(NacosProviderApplication.class, args);
	}

	@RestController
	class EchoController {
		@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
		public String echo(@PathVariable String string) {
			return "Hello Nacos Discovery " + string;
		}
	}
}

3.配置服务消费者

从而服务消费者可以通过 Nacos 的服务注册发现功能从 Nacos server 上获取到它要调用的服务。 

i. 在 application.properties 中配置 Nacos server 的地址:

server.port=8080
spring.application.name=service-consumer

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

ii. 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能。给 RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 Ribbon 的集成:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumerApplication.class, args);
    }

    @RestController
    public class TestController {

        private final RestTemplate restTemplate;

        @Autowired
        public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

        @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
        public String echo(@PathVariable String str) {
            return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
        }
    }
}

4.启动 ProviderApplication 和 ConsumerApplication 

调用 http://localhost:8080/echo/2018,返回内容为 Hello Nacos Discovery 2018

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

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

相关文章

iwebsec靶场 SSRF关卡通关笔记

iwebsec靶场SSRF漏洞通关笔记。 1. 源码分析 由于URL参数无经过严格的过滤&#xff0c;那么攻击者可以构造任意的url利用SSRF漏洞 如上所示&#xff0c;分析可知有SSRF漏洞 2.SSRF漏洞文件读取 &#xff08;1&#xff09;访问网址根目录下ssrf文件夹下的1.txt 构造SSRF漏洞访…

云原生 · DevOps | Sonar Qube

啊我摔倒了..有没有人扶我起来学习.... &#x1f471;个人主页&#xff1a;《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ &#x1f492;个人社区&#xff1a;《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

软银集团:从零到一万亿

第一章 公司发展概况 1.1 企业创始人和发展史 软银集团在1981年由孙正义在日本创立并于1994年在日本上市&#xff0c;是一家综合性的风险投资公司&#xff0c;主要致力IT产业的投资&#xff0c;包括网络和电信。 1981-1996年&#xff08;个人电脑及软件业务时期&#xff09;…

C语言函数针对训练--递归篇(动画讲解,由易到难递归例题)

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 前言 &#x1f496;作者&#xff1a;龟龟不断向前 ✨简介&#xff1a;宁愿做一只不停跑的慢乌龟&#xff0c;也不想当一只三分钟热度的兔子。 &#x1f47b;专栏&#xff1a;C初阶知识点 &#x1f47b;工具分享&#xff1a; …

【FreeRTOS】队列的使用

队列的使用前言创建队列发送数据接收数据查询队列数据个数使用示例创建两个线程配置按键驱动编写按键发送子函数编写按键读取子函数前言 基于 FreeRTOS 的应用程序由一组独立的任务构成——每个任务都是具有独立权限的小程序。这些独立的任务之间很可能会通过相互通信以提供有…

leetcode算法每天一题010: 正则表达式,判断pattern和string是否匹配(动态规划)

题目描述 ‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素 PATTERNTRUEFALSEa.baab,abb,acba, ab,ba*bb,ab,aab,aaaba,abb,acbc*a.baab,caab,cccccacb,ccabbbaab,cabbbdp[i] [j] 的含义是当字符串 s 的长度为 i&#xff0c;模式串 p 的长度为 j 时&#xff0c;两…

KubeVela 插件指南:轻松扩展你的平台专属能力

KubeVela 插件&#xff08;addon&#xff09;可以方便地扩展 KubeVela 的能力。正如我们所知&#xff0c;KubeVela 是一个微内核高度可扩展的平台&#xff0c;用户可以通过模块定义&#xff08;Definition&#xff09;[1]扩展 KubeVela 的系统能力&#xff0c;而 KubeVela 插件…

C# Winform程序开发笔记

C#d的开发发展到今天,已经改进了不少,对于非常多的应用可以使用C#进行开发,也非常方便,希望以下笔记对于高级开发者(网络通信、线程应用)而言能有所帮助吧。 1、INI文件的读写操作 1.1 类文件 using System; using System.Collections.Generic; using System.IO; usin…

【SpringBoot笔记21】SpringBoot框架使用AOP + 自定义注解实现请求日志记录

这篇文章&#xff0c;主要介绍SpringBoot框架使用AOP 自定义注解实现请求日志记录。 目录 一、SpringBoot记录日志 1.1、环境搭建 1.2、配置FastJson 1.3、自定义LogRecord注解 1.4、定义日志实体类 1.5、创建HttpRequestUtil工具类 1.6、定义AOP切面 1.7、编写测试类…

arm服务器运行onlyoffice

公司的arm服务器上运行onlyoffice报错 是x86_64架构的镜像在arm服务器下不兼容 需要下载兼容arm架构的docker镜像 在dockerhub上 onlyoffice地址 Docker Hubhttps://hub.docker.com/r/onlyoffice/documentserver 下载兼容arm架构的镜像版本 # docker --version Docker ver…

《从0开始写一个微内核操作系统》5-页表映射

ChinOS https://github.com/jingjin666/GN-base/tree/chinos 页表需要多少空间 在第4节中&#xff0c;我们了解到&#xff0c;每一级页表实际上就是一个512大小的unsigned long数组&#xff0c;一个页表本身占用512*84K空间 /* PGD */ /* 每个ENTRY包含512G内存区域 */ typed…

JavaWeb传统商城(MVC三层架构)的促销功能模块【进阶版】

文章目录一.JavaWeb商城项目的促销功能模块【进阶版】开发过程记录1.1 项目背景1.2 需求分析1.3 开发流程/顺序二.促销页面(0.1颗星)2.1 需求介绍2.2 JSP页面2.3效果展示三,商品详情页面(0.2颗星)3.1 需求介绍和效果图3.2 数据库分析3.2 Servlet层3.3 Service层3.4 DAO层3.5 JS…

一本通1064;奥运奖牌计数

#include <iostream> using namespace std; int main() {int n, Jin, Yin, Tong;int JinSum 0, YinSum 0, TongSum 0, sum;cin >> n;for (int i 1; i < n; i) // 循环n次{cin >> Jin >> Yin >> Tong; // 输入一天获得的金银铜牌数JinSum …

InfluxDB学习记录(三)——influxdb的flux语法

什么是Flux Flux 是 InfluxData 的功能性数据脚本语言&#xff0c;设计用于查询、分析和处理数据&#xff0c;它是InfluxQL 和其他类似 SQL 的查询语言的替代品。 每个 Flux 查询都需要以下内容&#xff1a; 数据源时间范围数据过滤器 Flux代码示例 from(bucket:"example…

重装系统后打印机状态已暂停如何恢复

​当我们在使用打印机打印文件的时候&#xff0c;有时候会发现打印机状态已暂停&#xff0c;打印不下去了&#xff0c;这时候怎么恢复呢&#xff0c;其实只需要取消掉打印暂停就可以了&#xff0c;下面就和大家讲讲重装系统后打印机状态已暂停如何恢复吧。 打印机状态已暂停怎…

【前端】Vue+Element UI案例:通用后台管理系统-Home组件:卡片、表格

文章目录目标代码0.布局1.左上User卡片2.左下table卡片2.1数据&#xff1a;TableData.js2.2table2.3代码优化&#xff1a;循环3.右上数据卡片3.1数据&#xff1a;CountData3.2结构3.3布局3.4样式总代码Home.vue参考目标 红框内部分都是卡片&#xff0c;鼠标悬停会有阴影左下是表…

java计算机毕业设计基于安卓Android的天文观星系统app uniapp 小程序

项目介绍 信息技术的发展带来了大量的数据内容,在这些数据中,想要找到自己需要的只有通过搜索引擎。如今,通过百度去查找信息成为大众的首选,然而在经济利益的驱动下,许多百度来的信息都是商业内容,很难找到真实有用的实际信息。在互联网中平台,天文信息交流和资源共享是一个非…

【每日训练】进制转换

目录 题目链接&#xff1a; 测试用例&#xff1a; 解析&#xff1a; 程序&#xff1a; 题目链接&#xff1a; 进制转换_牛客题霸_牛客网 (nowcoder.com) 测试用例&#xff1a; 解析&#xff1a; 题目描述&#xff1a; 输入一个十进制数&#xff0c;转化为对应输入的几进制数…

微服务及其在app自动化领域的应用

微服务是一种软件开发技术- 面向服务的体系结构&#xff08;SOA&#xff09;架构样式的一种变体&#xff0c;它提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相协调、互相配合&#xff0c;为用户提供最终价值。每个服务运行在其独立的进程中&#xff0c;服务与服…

5款可视化工具优缺点比对,谁赢了?

利用Excel表格进行汇报&#xff0c;底下坐着的领导可能会看起来眼花缭乱&#xff0c;但如果是以图表可视化的形式展现出来&#xff0c;那可简洁明了多了&#xff0c;不仅仅可以看到某个项目近几个月的走势&#xff0c;并且还能知道之后的决策。 可视化图表用什么工具做&#xf…