Nacos是Dynamic Naming and Configuration Service的缩写。What’s Nacos?

下面结合SpringBoot项目,为你介绍Nacos的基本功能以及如何使用Feign进行微服务间的通信。

一、Nacos的基本功能

Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它的主要功能包括:

  1. 服务发现与注册:微服务可以在Nacos中注册自己,并发现其他服务。
  2. 配置管理:集中管理所有微服务的配置。
  3. 服务健康监测:检查服务的健康状态。
  4. 动态DNS服务:通过域名来访问服务。

二、依赖配置

要在SpringBoot项目中使用Nacos和Feign,需要在pom.xml中添加以下依赖:

<!-- 服务注册与发现 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency><!-- 配置管理 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency><!-- Feign客户端 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency><!-- Spring Cloud 依赖管理 -->
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR12</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.9.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

三、配置文件

application.propertiesapplication.yml中配置Nacos服务地址:

# 应用名称
spring:application:name: service-consumercloud:nacos:discovery:server-addr: 127.0.0.1:8848  # Nacos服务器地址config:server-addr: 127.0.0.1:8848  # Nacos配置中心地址file-extension: yaml  # 配置文件格式# 端口号
server:port: 8080

四、代码实现

1. 服务提供者(service-provider)

首先创建一个简单的服务提供者,提供一个API接口:

package com.example.provider.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello/{name}")public String sayHello(@PathVariable String name) {return "Hello, " + name + "! I'm from service-provider.";}
}

启动类上添加@EnableDiscoveryClient注解:

package com.example.provider;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {public static void main(String[] args) {SpringApplication.run(ServiceProviderApplication.class, args);}
}
2. 服务消费者(service-consumer)

创建Feign客户端接口,调用服务提供者的API:

package com.example.consumer.feign;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;@FeignClient(name = "service-provider")  // 服务提供者的应用名称
public interface HelloFeignClient {@GetMapping("/hello/{name}")  // 服务提供者的API路径String sayHello(@PathVariable String name);
}

创建Controller,使用Feign客户端调用服务:

package com.example.consumer.controller;import com.example.consumer.feign.HelloFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConsumerController {@Autowiredprivate HelloFeignClient helloFeignClient;@GetMapping("/call/{name}")public String callProvider(@PathVariable String name) {return helloFeignClient.sayHello(name);}
}

启动类上添加@EnableFeignClients注解:

package com.example.consumer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableFeignClients
public class ServiceConsumerApplication {public static void main(String[] args) {SpringApplication.run(ServiceConsumerApplication.class, args);}
}

五、Nacos配置中心使用示例

创建一个配置类,读取Nacos配置中心的配置:

package com.example.consumer.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;@Component
@RefreshScope  // 支持配置动态刷新
public class AppConfig {@Value("${app.name:default}")private String appName;@Value("${app.version:1.0.0}")private String appVersion;public String getAppName() {return appName;}public String getAppVersion() {return appVersion;}
}

创建Controller,获取配置信息:

package com.example.consumer.controller;import com.example.consumer.config.AppConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConfigController {@Autowiredprivate AppConfig appConfig;@GetMapping("/config")public String getConfig() {return "App Name: " + appConfig.getAppName() + ", Version: " + appConfig.getAppVersion();}
}

在Nacos配置中心创建配置文件service-consumer.yaml

app:name: MyServiceConsumerversion: 1.0.1

六、测试步骤

  1. 启动Nacos服务器(下载并解压Nacos,运行startup.sh -m standalone)。
  2. 启动服务提供者(service-provider)。
  3. 启动服务消费者(service-consumer)。
  4. 访问服务消费者的API:http://localhost:8080/call/World,会返回Hello, World! I'm from service-provider.
  5. 访问配置信息:http://localhost:8080/config,会返回Nacos配置中心的配置信息。

通过上述示例,你可以看到Nacos的服务注册与发现、配置管理功能,以及Feign如何简化微服务间的通信。

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

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

相关文章

C1编译器和C2编译器Test01

在HotSpot VM中内嵌有两个JIT编译器&#xff0c;分别为Client Compiler和Server Compiler&#xff0c;通常简称为C1编译器和C2编译器。开发人员可以通过如下命令显式指定JVM在运行时到底使用哪一种即时编译器。(1)-client&#xff1a;指定JVM运行在Client模式下&#xff0c;并使…

MongoDB与Spring Boot完整使用指南

目录 1. MongoDB基础概念 什么是MongoDB? 核心概念对比 文档结构示例 2. MongoDB的特点与优势 主要特点 适用场景 3. MongoDB基本操作 基本CRUD操作 插入文档 查询文档 更新文档 删除文档 4. Spring Boot集成MongoDB 步骤1:添加依赖 步骤2:配置数据库连接 …

swift开发,关于应用、页面、视图的生命周期

目录一、应用生命周期&#xff08;App Lifecycle&#xff09;UIKit (AppDelegate)SwiftUI (使用 ScenePhase)二、页面生命周期&#xff08;ViewController Lifecycle&#xff09;三、视图生命周期&#xff08;UIView Lifecycle&#xff09;四、SwiftUI 视图生命周期五、关键对比…

借助HarmonyOS SDK,《NBA巅峰对决》实现“分钟级启动”到“秒级进场”

《NBA巅峰对决》是由望尘科技推出的国内首个真实还原5V5王朝模式的操作篮球手游&#xff0c;提供流畅操作手感和真实篮球赛场体验。丰富的玩法在为玩家带来高质游戏体验的同时&#xff0c;间接带来了启动流程冗长的问题&#xff0c;资源更新阶段的等待感尤为突出。 “我们发现&…

HT-LINK ICE:海速芯32Gbps信号调理芯片,40dB补偿+国产自主,打破高速互联瓶颈!

HT-LINK ICE&#xff08;TENX海速芯&#xff09;产品解析与推广文案一、产品定位HT-LINK ICE是TENX海速芯推出的高速信号调理芯片&#xff0c;专为PCIe 5.0/6.0、USB4、Thunderbolt等超高速接口设计&#xff0c;提供信号完整性增强和时钟恢复功能&#xff0c;适用于数据中心、A…

深入剖析 ADL:C++ 中的依赖查找机制及其编译错误案例分析

一、ADL 的定义与背景&#xff08;一&#xff09;ADL 的定义ADL&#xff08;Argument-Dependent Lookup&#xff0c;依赖查找&#xff09;是 C 中一种特殊的名称查找机制&#xff0c;用于在调用函数时&#xff0c;根据函数参数的类型来确定查找的命名空间范围。ADL 的核心思想是…

【科研绘图系列】R语言绘制相关系数图

文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息参考介绍 【科研绘图系列】R语言绘制相关系数图 加载R包 library(vegan) library(dplyr)# install.packages("./RVisulizationData/003.mantel test/ggcor_0.9.8.1.tar.gz", repos = NULL, type = &quo…

pharokka phold--快速噬菌体注释工具

pharokka是一款专用于噬菌体基因组及宏基因组的快速标准化注释工具。PS.仍在积极更新中&#xff0c;最近一次更新是在今年6.20。 若需对细菌基因组进行快速标准化注释&#xff0c;建议使用Bakta。启发pharokka开发及命名的Prokka也是优秀选择&#xff0c;但Bakta实为Prokka的卓…

深入浅出 Python Asynchronous I/O:从 asyncio 入门到实战

在现代软件开发中&#xff0c;性能是一个永恒的话题。特别是在处理网络请求、文件读写等 I/O 密集型任务时&#xff0c;传统的同步编程模型可能会因为等待而浪费大量时间。为了解决这个问题&#xff0c;异步编程应运而生。Python 通过内置的 asyncio 库&#xff0c;为开发者提供…

OpenCV颜色矩哈希算法------cv::img_hash::ColorMomentHash

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该类实现了颜色矩哈希算法&#xff08;Color Moment Hash&#xff09;&#xff0c;用于图像相似性比较。它基于图像在HSV颜色空间中的颜色矩统计特…

上海交大医学院张维拓老师赴同济医院做R语言训练营培训

当前&#xff0c;医学与人工智能的深度融合正迎来历史性发展机遇。华中科技大学同济医学院附属同济医院&#xff08;以下简称“同济医院”&#xff09;作为医疗人工智能应用的先行探索者&#xff0c;已在电子病历辅助书写、科研数据分析、医疗合同自动化审核等关键场景完成试点…

使用阿里云/腾讯云安装完成mysql使用不了

显示错误1130 - Host 106.228.110.117 is not allowed to connect to this MySQL server解决方案进入服务器的mysql命令行mysql -u root -p查看数据库SHOW DATABASES;选择mysql数据库USE mysql;查看里面的表SHOW TABLES;查询user表格的权限限制SELECT Host, User FROM user;将权…

第35周—————糖尿病预测模型优化探索

目录 目录 前言 1.检查GPU 2.查看数据 ​编辑 3.划分数据集 4.创建模型与编译训练 5.编译及训练模型 6.结果可视化 7.总结 前言 &#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 1.检查GPU import torch.n…

接口(上篇)

接口&#xff08;上篇&#xff09;1.概念2.语法规则3.使用和特性4.实现多接口5.接口间继承1.概念 接口就是公共的行为规范标准&#xff0c;大家在实现时&#xff0c; 只要符合规范标准&#xff0c;就可以通用。 在Java中&#xff0c;接口可以看成是&#xff1a;多个类的公共规…

UE5 源码编译setup.bat报错

文章目录编译报错改动说明小结更新编译报错 改动说明 因为需要整服务器&#xff0c;就编译源码&#xff0c;然后就遇到这个&#xff0c;很无语。这个问题一直存在&#xff0c;UE官方也不修复&#xff0c;也算是修复了&#xff0c;只是每次都要去重新下载替换下。也可以去问问d…

Linux下PCIe子系统(二)——PCIe子系统框架详解

Linux下PCIe子系统&#xff08;二&#xff09;——PCIe子系统框架详解 1. 概述 PCIe&#xff08;PCI Express&#xff09;子系统是Linux内核中负责管理PCI/PCIe设备的核心组件。它提供了一套完整的框架来发现、配置和管理PCI设备&#xff0c;实现了设备的即插即用和热插拔功能。…

[特殊字符] LLM(大型语言模型):智能时代的语言引擎与通用推理基座

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 从千亿参数到人类认知的AI革命 &#x1f50d; 一、核心定义与核心特征…

18-C#改变形参内容

C#改变形参内容 1.ref 参数 int A100; add1(ref A) public int add1 (ref int x) {x x 10;return x; }2.out 参数 int A100; int B200; int Z; add3(A,B, out Z) public int add3 (int x&#xff0c;int y&#xff0c;int z) {z x y;return z; }

恒盾C#混淆加密大师最新版本1.4.0更新 - 增强各类加密效果, 提升兼容性, 使.NET加密更简单

C#/.NET作为托管语言, 其编译生成的EXE/DLL极易被反编译工具还原源码。据统计&#xff0c;大量的商业软件曾遭遇过代码逆向风险&#xff0c;导致核心算法泄露、授权被跳过. 因此对于C#语言开发的.NET程序来说, 在发布前进行混淆和加密非常有必要. 恒盾C#混淆加密大师作为一款.N…

数学建模:非线性规划:二次规划问题

一、定义如果规划模型的目标函数是决策向量的二次函数&#xff0c;约束条件都是线性的&#xff0c;那么这个模型称为二次规划&#xff08;QP&#xff09;模型。二次规划模型的一般形式为二、性质凸性判定准则二次规划问题的凸性完全由Hessian矩阵H决定&#xff1a;​​严格凸QP…