快速入手:Nacos融合SpringCloud成为注册配置中心

快速入手:Nacos融合SpringCloud成为注册配置中心

  • 前言
    • 安装Nacos
    • 项目搭建
    • 添加配置
    • 启动类添加注解
    • 运行项目
    • 服务调用
      • RestTemplate 模式
      • FeignClient 模式
    • Gateway 网关

前言

  • Spring Cloud是一系列框架的集合,提供了微服务架构下的各种解决方案,如服务治理、配置管理、熔断器、网关等。它基于 Spring Boot,使得开发者能够快速构建微服务应用。
  • Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它可以作为服务注册中心,帮助微服务实例进行注册与发现,使各个微服务之间能够方便地进行通信。Nacos 服务器维护着一个服务注册表,记录着各个微服务的实例信息,如 IP 地址、端口号、服务名称等。当其他微服务需要调用某个服务时,只需从 Nacos 服务器获取服务实例列表,即可进行远程调用。此外,Nacos 还支持服务健康检查,能够实时监测服务实例的健康状态,将不健康的实例从服务列表中剔除,保证服务调用的可靠性。

当与 Nacos 集成时,Spring Cloud 应用可以从 Nacos 服务器获取配置信息。同时,Nacos 支持配置的动态更新,当配置信息发生变化时,微服务应用能够实时感知到变化,并自动更新本地的配置,无需重启应用。
搭建微服务.

安装Nacos

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

快速开始所生产出的Nacos服务为单机模式及未开启鉴权,建议仅在测试中使用,若在实际生产环境中部署,请部署集群模式并开启鉴权,以避免存在稳定性和安全性的风险。

您可以通过Nacos的版本下载页面、Github找到每个版本支持的功能的介绍,当前推荐的稳定版本为2.5.1。

Nacos 依赖 Java 环境来运行,请确保是在以下版本环境中安装使用:

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  • 64 bit JDK 1.8+;下载 & 配置。

下载完成后解压Nacos压缩包,以Linux为例。

如果是.zip文件执行如下代码:

unzip nacos-server-$version.zip

如果是.gz文件执行如下代码:

tar -xvf nacos-server-$version.tar.gz

解压完成后,进入/bin目录:

cd nacos/bin

注:Nacos的运行建议至少在2C4G 60G的机器配置下运行。

解压后进入/bin目录,执行启动命令,如果是Linux则执行.sh脚本文件,Windows则执行.cmd脚本文件,示例代码如下:

# Linux
sh startup.sh -m standalone
# Windows
startup.cmd -m standalone

standalone代表着单机模式运行,非集群模式。

启动后,返回以下信息说明启动成功,如图所示:

在这里插入图片描述

打开任意浏览器,输入地址:http://127.0.0.1:8848/nacos,即可进入Nacos控制台页面(无需数用户名和密码)。

如果需要关闭服务器,执行对应文件与启动时文件后缀一致,示例代码如下:

# Linux
sh shutdown.sh
# Windows 或者双击
shutdown.cmd

项目搭建

参考官网最新版本说明,如图所示:

在这里插入图片描述

我们使用当前Nacos最新的版本,依赖文件如下:

Spring Boot VersionSpring Cloud Alibaba VersionSpring Cloud Version
3.3.92023.0.3.*2023.0.3
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.9</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.sc.nacos.product</groupId><artifactId>sc-nacos-product</artifactId><version>0.0.1-SNAPSHOT</version><name>sc-nacos-product</name><description>sc-nacos-product</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 用于配置管理 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- 服务发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.3.2</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2023.0.3</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

添加配置

bootstrap.propertiesbootstrap.yml 中配置应用名和文件名、 Nacos server 的地址,示例代码如下:

spring:application:name: sc-nacos-product# 设置外部配置源config:import: nacos:sc-nacos-product-dev.ymlcloud:nacos:# 指定 Nacos 配置服务器的地址config:server-addr: 127.0.0.1:8848# 指定 Nacos 服务发现服务器的地址discovery:server-addr: 127.0.0.1:8848

Nacos上创建对应sc-nacos-product-dev.yml配置文件,如图所示:

在这里插入图片描述

启动类添加注解

启动类增加 @EnableDiscoveryClient开启服务注册发现功能,示例代码如下:

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

运行项目

启动项目,检查配置文件是否连接正常,如图所示:
在这里插入图片描述

再检查服务在Nacos上是否注册成功,如图所示:

在这里插入图片描述

至此一个简单的SpringCloud整合Nacos项目已经完成。

服务调用

Spring Cloud提供了许多用于服务调用的功能。常见的服务调用方式RestTemplateFeignClientRibbonHystrix 等。

RestTemplate 模式

RestTemplateSpring 提供的用于发送 HTTP 请求和接收响应的类。它适用于多种场景,尤其是在没有声明式调用需求时。通过 RestTemplate,你可以直接发送 HTTP 请求并获取返回结果,通常与 Ribbon 结合使用进行负载均衡。

引入依赖:

        <!-- 负载均衡 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>

sc-nacos-product服务中定义一个Controller接口,示例代码如下:

@RestController
public class AppController {@GetMapping("/echo/{str}")public String rest(@PathVariable String str){return "hello "+ str;}
}

按照之前的步骤,创建一个调用方项目(比如项目名:sc-nacos-consumer)。

添加 @LoadBlanced 注解,使得 RestTemplate 接入服务发现与负载均衡:

@Configuration
public class AppConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}

sc-nacos-consumer服务定义一个Controller接口,调用sc-nacos-product服务接口,示例代码如下:

@RestController
public class AppController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/rest/{str}")public String rest(@PathVariable String str){return restTemplate.getForObject("htt://sc-nacos-product/echo/"+ str, String.class);}
}

使用Postman等工具,请求sc-nacos-consumer服务接口,确认响应无误,如图所示:

在这里插入图片描述

FeignClient 模式

FeignClientSpring Cloud 提供的一个声明式 HTTP 客户端,可以让你通过注解方式自动化服务调用。Feign 会根据接口定义自动实现 HTTP 请求,简化了服务调用的代码,并集成了负载均衡和错误处理功能。

引入依赖:

        <!-- 远程调用 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

启动类增加@EnableFeignClients注解,用于启用 Feign 客户端,示例代码如下:

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

使用 @FeignClient 注解将sc-nacos-product服务提供的Controller接口,包装成一个 FeignClient,属性 name 对应对端应用名,示例代码如下:

@FeignClient(name = "sc-nacos-product")
public interface EchoService {@GetMapping(value = "/echo/{str}")String echo(@PathVariable(value = "str") String str);
}

EchoService 作为标准bean 注入sc-nacos-consumer服务,即可对远端服务发起请求了,示例代码如下:

@RestController
public class AppController {@Autowiredprivate EchoService echoService;@GetMapping("/client/{str}")public String client(@PathVariable(value = "str") String str){return echoService.echo(str);}
}

需要注意再sc-nacos-consumer服务,使用@EnableFeignClients注解并指定扫描路径,示例代码如下:

@SpringBootApplication
@EnableFeignClients(basePackages = "com.sc.nacos.product.client")
@EnableDiscoveryClient
public class ScNacosConsumerApplication {public static void main(String[] args) {SpringApplication.run(ScNacosConsumerApplication.class, args);}}

使用Postman等工具,请求sc-nacos-consumer服务接口,确认响应无误,如图所示:

在这里插入图片描述

Gateway 网关

Spring Cloud GatewaySpring Cloud 生态系统中的一个 API 网关,用于路由请求、过滤请求和响应。

引入依赖:

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>

按照之前的步骤,创建一个网关项目(比如项目名:sc-nacos-gateway)。

启动类添加注解,示例代码如下:

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

application.yml 中配置路由规则:

spring:cloud:gateway:routes:- id: sc-nacos-consumeruri: lb://sc-nacos-consumerpredicates:- Path=/consumer/**- id: sc-nacos-producturi: lb://sc-nacos-productpredicates:- Path=/product/**filters:- StripPrefix=1

每个路由规则使用 - 来表示一个独立的路由。

  • id为当前的路由规则唯一标识符。

  • uri是一个关键配置项,它代表着请求被路由后要前往的目标地址或者服务发现中的服务名。 lb:// 是负载均衡的前缀,当请求/consumer开头的地址,就会被路由到sc-nacos-consumer服务,并且会通过负载均衡算法选择合适的实例来处理请求。

  • predicates 是路由的匹配条件部分,用于判断什么样的请求会被这个路由规则所处理。它表示当请求的路径以任意地址开头时,该请求就会匹配这个路由规则。** 是通配符,可以跟任意的路径信息。

  • filters 是路由的过滤部分,用于在请求被路由前后对请求和响应进行修改或处理。StripPrefix 过滤器的作用是在请求被路由之前,从请求的路径中移除指定数量的路径前缀部分。这里的 1 表示移除路径中的第一个路径段。比如:请求/product/user在经过 StripPrefix=1 过滤器处理后,实际被路由的路径会变成 /user

完整的配置文件如下:

spring:application:name: sc-nacos-gatewayconfig:import: nacos:sc-nacos-gateway.ymlcloud:nacos:config:server-addr: 127.0.0.1:8848discovery:server-addr: 127.0.0.1:8848gateway:routes:- id: sc-nacos-consumeruri: lb://sc-nacos-consumerpredicates:- Path=/consumer/**filters:- StripPrefix=1- id: sc-nacos-producturi: lb://sc-nacos-productpredicates:- Path=/product/**filters:- StripPrefix=1

使用Postman等工具,从网关请求sc-nacos-consumer服务接口,确认响应无误,如图所示:

在这里插入图片描述

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

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

相关文章

2025年2月-3月后端go开发找工作感悟

整体感悟 目标 找工作首先要有一个目标&#xff0c;这个目标尽可能的明确&#xff0c;比如我要字节、拼多多之类的公司&#xff0c;还是要去百度、滴滴这样的&#xff0c;或者目标是创业公司。但是这个目标是会动态调整的&#xff0c;有可能我们的心态发生了变化&#xff0c;一…

Python | 如何在Pandas中删除常量列

在数据分析中&#xff0c;经常会遇到数据集中始终具有常量值的列&#xff08;即&#xff0c;该列中的所有行包含相同的值&#xff09;。这样的常量列不提供有意义的信息&#xff0c;可以安全地删除而不影响分析。 如&#xff1a; 在本文中&#xff0c;我们将探索如何使用Pyth…

5.高频加热的原理与常用集成电路介绍

一、高频加热的类型 利用高频电源加热通常由两种方法&#xff1a;电介质加热&#xff08;被加热物体绝缘&#xff09;与感应加热&#xff08;被加热物体导电&#xff09;&#xff0c;详细解释如下&#xff1a; 电介质加热&#xff08;利用高频电压的高频电场导致物体自身分子摩…

串口通信与Modbus通信的区别和联系

一、定义与定位 1‌、串口通信‌ 是物理层的硬件接口标准&#xff0c;用于实现设备间的‌串行数据传输‌&#xff0c;常见类型包括RS-232、RS-485和RS-422‌35。其功能是完成并行数据与串行信号的转换&#xff0c;并定义电气特性&#xff08;如电平、传输速率&#xff09;‌。…

Linux生产者消费者模型

Linux生产者消费者模型 Linux生产者消费者模型详解生产者消费者模型生产者消费者模型的概念生产者消费者模型的特点生产者消费者模型优点 基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型模拟实现基于阻塞队列的生产消费模型基础实现生产者消费者步调调整条…

【中文翻译】第9章-The Algorithmic Foundations of Differential Privacy

由于GitHub项目仅翻译到前5章&#xff0c;我们从第6章开始通过大语言模型翻译&#xff0c;并导出markdown格式。 大模型难免存在错漏&#xff0c;请读者指正。 教材原文地址&#xff1a;https://www.cis.upenn.edu/~aaroth/Papers/privacybook.pdf 9 差分隐私与计算复杂度 到目…

【AI大模型】搭建本地大模型GPT-NeoX:详细步骤及常见问题处理

搭建本地大模型GPT-NeoX:详细步骤及常见问题处理 GPT-NeoX是一个开源的大型语言模型框架,由EleutherAI开发,可用于训练和部署类似GPT-3的大型语言模型。本指南将详细介绍如何在本地环境中搭建GPT-NeoX,并解决过程中可能遇到的常见问题。 1. 系统要求 1.1 硬件要求 1.2 软…

Unity跨平台构建快速回顾

知识点来源&#xff1a;人间自有韬哥在&#xff0c;豆包 目录 一、发布应用程序1. 修改发布必备设置1.1 打开设置面板1.2 修改公司名、游戏项目名、版本号和默认图标1.3 修改 Package Name 和 Minimum API Level 2. 发布应用程序2.1 配置 Build Settings2.2 选择发布选项2.3 构…

低配电脑畅玩《怪物猎人:荒野》,ToDesk云电脑优化从30帧到144帧?

《怪物猎人&#xff1a;荒野&#xff08;Monster Hunter Wilds&#xff09;》自2025年正式发售以来已取得相当亮眼的成绩&#xff0c;仅用三天时间便轻松突破800万销量&#xff0c;目前顺利蝉联周榜冠军&#xff1b;凭借着开放世界的宏大场景和丰富的狩猎玩法&#xff0c;该游戏…

Flink基础简介和安装部署

文章目录 一、Flink基础简介1、什么是Flink2、Flink流处理特性3、Flink四大基石4、Flink中的角色 二、Flink集群搭建1、Local模式①上传Flink安装包②启动交互窗口③提交任务测试④访问WebUI页面查看④退出停止集群 一、Flink基础简介 1、什么是Flink Flink是⼀个分布式&#…

【2025】基于ssm+jsp的二手商城系统设计与实现(源码、万字文档、图文修改、调试答疑)

基于SSMJSP的二手商城系统设计与实现系统功能结构图&#xff1a; 课题背景 随着经济的发展和人们生活水平的提高&#xff0c;二手交易市场日益活跃。人们对于闲置物品的处理方式逐渐从传统的废品回收转变为通过二手交易平台进行再利用。这种交易模式不仅能够帮助用户节省开支&a…

幻影星空亮相CAAPA北京展 引领文旅产业升级转型

3月19日&#xff0c;中国游艺机游乐园协会&#xff08;CAAPA&#xff09;主办的2025中国&#xff08;北京&#xff09;国际游乐设施设备博览会及2025北京国际旅游休闲娱乐产业博览会在北京盛大启幕。在这场行业盛会上&#xff0c;广州卓远旗下的“幻影星空”品牌以创新性的虚拟…

银河麒麟桌面版包管理器(二)

以下内容摘自《银河麒麟操作系统进阶应用》一书 APT包管理器 APT是Debian及其派生系统的包管理器&#xff0c;构建在dpkg之上&#xff0c;以其强大的依赖性处理能力和丰富的软件仓库而闻名。APT具有自动解决依赖关系、提供易于使用的命令行工具&#xff08;如apt-get、apt-ca…

【STM32实物】基于STM32的扫地机器人/小车控制系统设计

基于STM32的扫地机器人/小车控制系统设计 演示视频: 基于STM32的扫地机器人小车控制系统设计 简介:扫地机器人系统采用分层结构设计,主要包括底层硬件控制层、中间数据处理层和上层用户交互层。底层硬件控制层负责对各个硬件模块进行控制和数据采集,中间数据处理层负责对采…

STM32收发数据包中间件——ProtoFlow,更方便的打包解包助手

引言 在嵌入式开发中&#xff0c;数据包封装是不可或缺的一环。手动编写协议不仅耗时&#xff0c;还容易出错。ProtoFlow 的出现&#xff0c;就是为了让数据包封装变得简单、高效、可靠。它不仅占用资源少&#xff0c;还能适配多种场景&#xff0c;是你项目的理想助手。 项目地…

Xcode16.1使用MonkeyDev运行Tiktok报错分析

问题1&#xff1a; Build input files cannot be found: /usr/lib/libc.dylib, /usr/lib/libstdc.dylib. Did you forget to declare these files as outputs of any script phases or custom build rules which produce them? 解决办法&#xff1a;在TARGETS的dylib中的Bui…

R语言交互项-formula

R语言交互项-formula 交互项的模型交互项的几种情形连续变量和连续变量连续变量和分类变量分类变量和分类变量总结交互项的模型 统计中的交互和相关是完全不同的两个概念,交互项是指两个或者多个变量对因变量的协同效应,关注变量对因变量的联合影响,比如变量X对Y的影响是否因…

图解AUTOSAR_SWS_IPDUMultiplexer

AUTOSAR IPDUMultiplexer模块详解 PDU复用器模块架构与实现分析 目录 1. IPDU Multiplexer概述2. 模块配置模型 2.1 配置结构概述2.2 配置类详解2.3 配置关系说明3. 架构设计 3.1 模块位置与接口3.2 内部组件结构3.3 接口交互模式4. 操作序列 4.1 PDU传输流程4.2 PDU传输流程详…

手机怎么换网络IP有什么用?操作指南与场景应用‌

在数字化时代&#xff0c;手机已经成为我们日常生活中不可或缺的一部分&#xff0c;无论是工作、学习还是娱乐&#xff0c;手机都扮演着至关重要的角色。而在手机的使用过程中&#xff0c;网络IP地址作为设备在互联网上的唯一标识符&#xff0c;其重要性和作用不容忽视。本文将…

CH32V208GBU6沁恒协议栈BUG:在主机Write的同一包notify会造成主机一直Write不成功

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…