手把手教你Spring Cloud Alibaba系列教程:Nacos实现服务注册与发现

简介: 手把手教你Spring Cloud Alibaba系列教程:Nacos实现服务注册与发现

Nacos实现服务注册与发现



什么是Nacos?


Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。


在接下来的教程里将使用Nacos作为微服务架构中的注册中心(替代:consul等)以及配置中心(spring cloud config)来使用。

安装Nacos


 下载地址:https://github.com/alibaba/nacos/releases 
 本文版本:2.1.1

通过下载工具下载之后,解压。里面有不同脚本文件,根据不同平台,执行相应命令,启动单机版Nacos服务:

Linux/Unix/Mac:sh startup.sh -m standalone
Windows:cmd startup.cmd -m standalone

相应startup.sh脚本在Nacos解压后的bin目录下。

1.png

启动完成之后,访问:http://localhost:8848/,可以进入Nacos的服务管理页面,具体如下;

1.png


应用接入Nacos注册中心


在完成了Nacos服务的安装和启动之后,下面我们编写两个应用(服务提供者与服务消费者)来验证服务的注册与发现了。


服务提供者


  • 第一步:创建一个Spring Boot应用
  • 第二步:修改pom文件
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.1</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
        <optional>true</optional>
    </dependency>
</dependencies>

述内容主要三部分:


parent:定义spring boot的版本

dependencyManagement:spring cloud的版本以及spring cloud alibaba的版本,

dependencies:当前应用要使用的依赖内容。这里主要新加入了Nacos的服务注册与发现模块:spring-cloud-starter-alibaba-nacos-discovery。


第三步:创建应用主类,并实现一个HTTP接口

@EnableDiscoveryClient
@SpringBootApplication
public class ErosApplication {
    public static void main(String[] args) {
        SpringApplication.run(ErosApplication.class, args);
    }
    @Slf4j
    @RestController
    static class ErosController {
        @GetMapping("/hello")
        public String hello(@RequestParam String name) {
            return "hello " + name;
        }
    }
}
  • 第四步:配置服务名称和Nacos地址spring:
  server:
    port: 8001
  application:
    name: eros-gateway
  cloud:
    discovery:
      server-addr=127.0.0.1:8848 
  • 第五步:启动应用。
INFO 10475 --- [           main] o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, eros-gateway 192.168.177.1:8801 register finished

在启动都没问题后可以访问Nacos的管理页面http://127.0.0.1:8848/nacos/来查看服务列表


服务消费者


接下来,实现一个应用来消费上面已经注册到Nacos的服务。

  • 第一步:创建一个Spring Boot应用
  • 第二步:编辑pom.xml中的依赖内容,与上面服务提供者的一样即可。
  • 第三步:创建应用,实现一个HTTP接口,在该接口中调用服务提供方的接口。
@EnableDiscoveryClient
@SpringBootApplication
public class ErosApplication {
    public static void main(String[] args) {
        SpringApplication.run(ErosApplication.class, args);
    }
    @Slf4j
    @RestController
    static class TestController {
        @Autowired
        LoadBalancerClient loadBalancerClient;
        @GetMapping("/test")
        public String test() {
            ServiceInstance serviceInstance = loadBalancerClient.choose("eros-gateway");
            String url = serviceInstance.getUri() + "/hello?name=" + "eros";
            RestTemplate restTemplate = new RestTemplate();
            String result = restTemplate.getForObject(url, String.class);
            return "Invoke : " + url + ", return : " + result;
        }
    }
}

这里使用了Spring Cloud Common中的LoadBalancerClient接口来挑选服务实例信息。然后从挑选出的实例信息中获取可访问的URI,拼接上服务提供方的接口规则来发起调用。


-第四步:配置服务名称和Nacos地址,让服务消费者可以发现上面已经注册到Nacos的服务。

  server:
    port: 8001
  application:
    name: eros-gateway-client
  cloud:
    discovery:
      server-addr=127.0.0.1:8848

第五步:启动服务消费者,然后通过curl或者postman等工具发起访问,下面以curl为例:

$ curl localhost:9000/test
Invoke : http://192.168.177.1:8801/hello?name=eros, return : hello eros
$ curl localhost:9000/test
Invoke : http://192.168.177.1:8802/hello?name=eros, return : hello eros

通过以上请求可以看到,两次不同请求的时候,真正实际调用的服务提供者实例是不同的,也就是说,通过LoadBalancerClient接口在获取服务实例的时候,已经实现了对服务提供方实例的负载均衡。


      以上就是我们今天的教程,如果本文对你有所帮助,欢迎关注点赞,分享给您身边的朋友。您的鼓励就是对我的最大动力。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
14751 60
|
6月前
|
人工智能 Java API
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
3.1.0 发布核心全新功能-Agent 注册中心,助力构建基于 A2A 协议的多 Agent 协作的AI应用,同时 MCP 注册中心适配最新 MCP 官方注册中心协议及升级优化多项核心功能。
1754 61
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
1665 146
|
9月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
813 0
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
1679 156
|
人工智能 自然语言处理 Java
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
本文介绍了如何通过Model Context Protocol (MCP) 协议将传统Spring Boot服务改造为支持AI交互的智能系统。MCP作为“万能适配器”,让AI以统一方式与多种服务和数据源交互,降低开发复杂度。文章以图书管理服务为例,详细说明了引入依赖、配置MCP服务器、改造服务方法(注解方式或函数Bean方式)及接口测试的全流程。最终实现用户通过自然语言查询数据库的功能,展示了MCP在简化AI集成、提升系统易用性方面的价值。未来,“对话即服务”有望成为主流开发范式。
9131 7
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
4845 14
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
982 7
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
1500 1
Springcloud Alibaba + jdk17+nacos 项目实践
下一篇
开通oss服务