【Spring Cloud Alibaba】Nacos的服务注册和发现(discovery)的使用

news2025/3/13 19:16:47

【Spring Cloud Alibaba】系列文章

标题链接
【Spring Cloud Alibaba】Nacos的安装与介绍以及Nacos集群的安装https://masiyi.blog.csdn.net/article/details/129530053
【Spring Cloud Alibaba】Nacos config的使用和高阶用法https://masiyi.blog.csdn.net/article/details/129545422
【Spring Cloud】Gateway的配置与使用https://masiyi.blog.csdn.net/article/details/129881118
【Spring Cloud Alibaba】OpenFeign的使用https://masiyi.blog.csdn.net/article/details/129561583

上次我们讲了Nacos的Config,这次我们讲Nacos的服务注册和发现

Nacos是一个开源的分布式系统服务发现、配置管理和服务管理平台。它提供了服务注册和发现功能,使得在分布式系统中可以方便地实现服务之间的通信和调用。

服务注册是指将服务实例的信息注册到Nacos服务器上,以便其他服务或客户端能够发现和调用它。在Nacos中,服务提供者通过向Nacos注册中心发送注册请求,将自己的服务实例信息(如IP地址、端口号、健康状态等)注册到注册中心上。注册中心将这些信息存储起来,并提供查询接口供其他服务或客户端使用。

服务发现是指服务消费者通过查询Nacos注册中心获取可用的服务实例信息,从而实现服务的调用。服务消费者可以通过Nacos提供的API或客户端库进行服务发现,根据自己的需求和策略从注册中心获取到合适的服务实例信息,然后进行服务调用。

Nacos的服务注册和发现具有以下特点:

  1. 动态性:Nacos支持服务实例的动态注册和注销,当服务实例上线或下线时,Nacos能够及时更新注册中心的信息。
  2. 健康检查:Nacos能够通过定期的健康检查来判断服务实例的状态,如果服务实例异常或不可用,Nacos会将其从注册中心中移除,以保证其他服务不会调用到不可用的服务。
  3. 多环境支持:Nacos支持多环境的服务注册和发现,可以将不同环境(如开发环境、测试环境、生产环境)的服务实例信息分开管理。
  4. 服务路由与负载均衡:Nacos支持服务路由和负载均衡策略的配置,可以根据需求将请求分发到不同的服务实例上,实现负载均衡和服务治理。

总结来说,Nacos的服务注册和发现功能提供了一种简单可靠的方式来管理和调用分布式系统中的服务。它能够方便地实现服务之间的通信和调用,并提供了动态性、健康检查、多环境支持以及路由与负载均衡等特性,帮助开发人员构建可靠的分布式系统。

文章目录

    • 🙈第一步,导入jar包
    • 🙈第二步,编写生产者
    • 🙈第三步,生产者启动类
    • 🙈第四步,编写消费端
    • 🙈第五步,消费端启动类
    • 🙈第六步,依次启动生产端和消费端

Nacos的服务注册和发现用到的组件是discovery

代码链接
https://gitee.com/WangFuGui-Ma/spring-cloud-alibaba/tree/master/nacos/discovery

🙈第一步,导入jar包

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>0.2.2.RELEASE</version>
            </dependency>

spring-cloud-starter-alibaba-nacos-discovery是有两个groupId的,一个是spring官方的,一个是阿里巴巴的,用哪个都可以

在这里插入图片描述

🙈第二步,编写生产者

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProviderController {


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

}

这是一个使用Nacos的服务注册和发现功能的示例代码,其中提供了一个RESTful接口 /echo/{string},用于返回一个带有字符串参数的消息。

在这段代码中,使用了@RestController注解将该类声明为一个RESTful控制器,@RequestMapping注解用于指定请求映射路径和请求方法。

接口的路径为/echo/{string},其中{string}是一个路径变量,可以通过@PathVariable注解获取到URL中的参数值。

方法echo()接收一个字符串参数string,并将其拼接到返回的消息中。

当该服务实例启动并成功注册到Nacos注册中心后,其他服务或客户端就可以通过Nacos的服务发现功能,找到并调用该接口,获取返回的消息。

这样,通过Nacos的服务注册和发现功能,可以实现服务之间的动态通信和调用。

🙈第三步,生产者启动类


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author masiyi
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {

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

}

添加@EnableDiscoveryClient注解,以支持服务发现

  • @EnableDiscoveryClient 是 Spring Cloud 提供的注解之一,用于启用服务发现功能,并将当前应用程序注册为服务提供者或服务消费者。使用该注解后,应用程序就可以通过服务注册中心发现和访问其他注册的服务。
  • 如果您的应用程序使用 Spring Cloud Netflix Eureka 或 Consul 作为服务注册中心,则必须在应用程序的启动类上添加 @EnableDiscoveryClient 注解,以启用服务发现功能。
  • 但是,如果您使用的是其他的服务注册中心,例如 Spring Cloud Alibaba Nacos,那么不需要添加 @EnableDiscoveryClient 注解,因为 Spring Cloud Alibaba 的服务发现客户端已经实现了自动配置和自动注册。在这种情况下,即使不添加 @EnableDiscoveryClient 注解,应用程序也可以通过 Nacos 发现和访问其他注册的服务。
  • 因此,如果您使用的是 Spring Cloud Alibaba Nacos 作为服务注册中心,并且已经将 spring-cloud-starter-alibaba-nacos-discovery 依赖添加到应用程序中,则不需要显式添加 @EnableDiscoveryClient 注解。

生产者application.yml

spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

server:
  port: 8071

🙈第四步,编写消费端

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController {

    private final RestTemplate restTemplate;

    @Autowired
    public ConsumerController(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);
    }
}

在这段代码中,使用了@RestController注解将该类声明为一个RESTful控制器。构造函数中注入了RestTemplate实例。

echo()方法用于向服务提供者发送GET请求,并通过RestTemplategetForObject()方法获取到服务提供者返回的消息。请求的URL是通过拼接字符串http://service-provider/echo/{str}构建的,其中service-provider是服务提供者的注册名,{str}是路径变量,它会被传递给服务提供者的接口作为参数。

通过Nacos的服务注册和发现功能,RestTemplate会自动从注册中心获取服务提供者的实例地址,并将请求发送到其中一个实例上。这样,消费者就可以通过调用该控制器的接口,间接调用服务提供者的接口,实现了服务之间的通信。

🙈第五步,消费端启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * @author xiaojing
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApplication {

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

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


}

消费端application.yml

spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

server:
  port: 8081

🙈第六步,依次启动生产端和消费端

访问消费端的接口

http://localhost:8081/echo/你好

在这里插入图片描述

当你访问消费端的接口http://localhost:8081/echo/你好时,会触发ConsumerController中的echo()方法。

这个方法会使用RestTemplate来发送GET请求到服务提供者的接口。请求的URL会被构建为http://service-provider/echo/你好,其中service-provider是服务提供者的注册名,你好是路径变量。

通过Nacos的服务注册和发现功能,RestTemplate会自动从注册中心获取服务提供者的实例地址,并将请求发送到其中一个实例上。服务提供者接收到请求后,会返回Hello Nacos Discovery 你好作为响应。

因此,当你访问消费端的接口时,你会在浏览器或其他HTTP客户端中看到返回的结果是Hello Nacos Discovery 你好。这表明消费端成功调用了服务提供者的接口,并获取到了正确的响应。

Nacos官网地址:
https://nacos.io/zh-cn/docs/quick-start.html

Nacos作为一个服务注册和发现的组件,为微服务架构提供了便捷的服务管理和调用机制。在本文中,我们通过一个简单的示例演示了Nacos的服务注册和发现的过程。

首先,我们创建了一个服务提供者,它通过Nacos将自己注册到注册中心,并提供了一个接口用于返回响应。然后,我们创建了一个消费者,它使用RestTemplate来调用服务提供者的接口。通过Nacos的服务发现功能,消费者可以轻松地发现和调用服务提供者的实例,实现了服务间的解耦和动态的服务调用。

通过这个示例,我们可以看到Nacos的服务注册和发现能够简化微服务架构中的服务管理和调用过程,提供了更高的灵活性和可靠性。开发人员可以通过Nacos快速构建可扩展的微服务应用,并实现服务间的通信和协作。

总而言之,Nacos的服务注册和发现功能为微服务架构的实现提供了重要的基础设施支持,帮助开发人员更好地管理和调用服务。它是构建可靠和弹性的分布式系统的关键组件之一,值得在实际项目中进行深入的学习和应用。

在这里插入图片描述

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

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

相关文章

LabVIEW通过嘴唇图像识别为残疾人士开发文本输入系统

LabVIEW通过嘴唇图像识别为残疾人士开发文本输入系统 近年来&#xff0c;计算机已经成为现代人日常生活中的一种信息器具。人们可以使用计算机来处理复杂的文件&#xff0c;获取新信息并在线购物等。但是&#xff0c;上面讲的使用电脑的所有好处对普通人来说都很方便&#xff…

React05-样式隔离

一、样式隔离方案 css 的样式是全局样式&#xff0c;在书写react组件时&#xff0c;如果写了相同的样式类名&#xff0c;很容易造成样式污染。 在 vue 中&#xff0c;vue 官方提供了样式隔离方法&#xff0c;在组件代码中的 style 标签中加入 scoped&#xff0c;可以让这部分…

Python案例分析|使用Python图像处理库Pillow处理图像文件

本案例通过使用Python图像处理库Pillow&#xff0c;帮助大家进一步了解Python的基本概念&#xff1a;模块、对象、方法和函数的使用 使用Python语言解决实际问题时&#xff0c;往往需要使用由第三方开发的开源Python软件库。 本案例使用图像处理库Pillow中的模块、对象来处理…

Java中的JDBC编程(数据库系列6)

目录 前言&#xff1a; 1.什么是Java的JDBC编程 2.JDBC的数据库驱动包的导入过程 3.JDBC代码的编写 3.1创建并初始化一个数据源 3.2和数据库服务器建立连接 3.3构造SQL语句 3.4执行SQL语句 3.5释放必要的资源 3.6整体代码的展示及演示 3.7代码的优化 3.8 查询操作的…

「深度学习之优化算法」(十四)麻雀搜索算法

1. 麻雀搜索算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   麻雀搜索算法(sparrow search algorithm)是根据麻雀觅食并逃避捕食者的行为而提出的群智能优化算法。提出时间是2020年,相关的论文和研究还比较少,有可能还有一些正在发表中,受疫情影响需要论…

关于学习过程中的小点

nfev : 函数求值次数njev : Jacobian 评估的数量nit :算法的迭代次数 permute(dims)#维度转换 torch.split #[按块大小拆分张量] Pytorch.view Pytorch中使用view()函数对张量进行重构维度&#xff0c;类似于resize()、reshape()。用法如下&#xff1a;view(参数a,参数b,...)&a…

Nacos1.4.2单机与集群的安装部署

CentOS 部署Nacos1.4.2 下载 nacos 下载链接&#xff1a;https://github.com/alibaba/nacos/tags 如何选择我们下载的 nocas 版本&#xff1f; 查看 Spring Cloud Alibaba 与 nacos 版本对应关系&#xff1a;SpringCloudAlibaba 组件对应关系说明 本项目使用 nacos 1.4.2 …

Python(十七)数据类型转换——str()函数和int()函数

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

2023年上半年:C#、Python和一些实用语言

文章目录 C#Pythonerlang和exilirfortranR语言 最近半年的开发任务主要集中在C#和Python上&#xff0c;所以博客内容也几乎围绕这两个部分&#xff0c;偶尔会穿插一些其他语言。下面就对2023年上半年的博客做一个总结。 C# 主要用C#写了一个文本阅读器&#xff0c;提供生成目…

学C的第二十八天【字符串函数和内存函数的介绍(一)】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第二十七天【指针的进阶&#xff08;三&#xff09;】_高高的胖子的博客-CSDN博客 前言&#xff1a; &#xff08;1&#xff09;. C语言中对于字符和字符串的处理很是频繁&…

linux驱动开发:驱动开发框架,linux内核字符设备驱动开发过程

一、驱动框架 1.Linux内核模块和字符驱动的关系 模块是Linux进行组建管理的一种方式, 结构体:对设备的管理内核需要抽象出来一个结构体来描述设备所有的共性信息写驱动需要申请一个结构体并赋值(初始化),然后注册给内核让内核统一管理 驱动:由内核统一管理,所以驱动…

NUXT3学习笔记2

1、配置Ant design Vue (两个安装方式随便选一种&#xff0c;yarn会安装的更快) npm i ant-design-vue --save yarn add ant-design-vue 2、使⽤的 Vite&#xff0c;你可以使⽤ unplugin-vue-components 来进⾏按需加载。 yarn add unplugin-vue-components --save 在nuxt.…

设计模式——享元模式

享元模式 定义 享元模式&#xff08;Flyweight Pattern&#xff09;是池技术的重要实现方式。 使用共享对象可以有效地支持大量的细粒度对象。 优缺点、应用场景 优点 可以大大减少应用程序创建对象的数量&#xff0c;降低程序内存占用。 缺点 提高了系统的复杂度&…

5分钟上手IP代理服务

一 IP代理服务 在网上找了一个性价比高的IP代理服务&#xff0c;一个IP地址1分钱。 二 API协议 调用方式为http协议&#xff0c;响应数据格式支持JSON和txt&#xff0c;都是比较常用的方式。 三 源码范例 包括一些主流的编程语言&#xff0c;一分钟上手。 我用的python比较…

【Redis应用】查看附近(五)

&#x1f697;Redis应用学习第五站~ &#x1f6a9;本文已收录至专栏&#xff1a;Redis技术学习 查看附近的XXX在我们的实际应用中非常广泛&#xff0c;能支持该功能的技术有很多&#xff0c;而在我们的Redis中主要依靠GEO数据结构来实现该功能&#xff01; 一.GEO用法引入 GE…

问题解决:win10连接手机热点总是频繁自动断开

问题描述:尝试解决 问题解决:win10连接手机热点总是频繁自动断开 问题描述: 在使用win10笔记本电脑连接手机热点上网时,是不是的网络自动就断掉了,而且重新连上后,用着用着又断了, 这就让人有点恼火了, 尝试解决 重启电脑与手机 以前没出现过而现在有这种情况,可能是电脑或手机…

Spark复习笔记

文章目录 Spark在Hadoop高可用模式下读写HDFS运行流程构成组件作业参数RDD机制的理解算子map与mapPartition区别Repartition和Coalesce区别reduceBykey 与 groupByKeyreduceByKey、foldByKey、aggregateByKey、combineByKey区别cogroup rdd 实现原理宽窄依赖为什么要划分stage如…

Elasticsearch:语义搜索、知识图和向量数据库概述

结合对你自己的私有数据执行语义搜索的概述 什么是语义搜索&#xff1f; 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术。 这种方法基于这样的想法&#xff1a;搜索引擎不仅应该匹配查询中的关键字&#xff0c;还应该尝…

LINUX命令:update-alternatives(软件版本管理工具)

前言   在基于 LINUX 操作系统之上安装所需开发环境组件时&#xff0c;可能会遇到无可避免的场景是&#xff1a;同一个组件&#xff0c;我们需要同时使用到两个或者更多的版本&#xff0c;比如 Java 有 1.6、1.7、1.8 等多版本&#xff0c;又比如 Python 有 2、3 等等&#x…

「2024」预备研究生mem-数学强化-整数、因数与倍数

一、整数、因数与倍数 二、带余除数 三、奇数与偶数 四、不定方程