SpringCloudAlibaba之nacos的服务注册与发现

简介: 如图所示:按照图示搭建一个nacos作为服务注册中心的简单应用.

本章节讲解nacos的服务注册与发现的简单使用



如图所示:按照图示搭建一个nacos作为服务注册中心的简单应用


创建provider服务提供者


  1. 创建nacos-discovery-provider模块
  2. 引入依赖


<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <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>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
</dependencies>
  1. 创建SpringBoot主启动类
package cn.axj.nacos.discovery;

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

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

这里一定记得要加上@EnableDiscoveryClient注解,该注解表示该应用要注册到注册中心


  1. 配置bootstrap.yml
spring:
  application:
    name: nacos-discovery-provider
  cloud:
    nacos:
      config:
        group: nacos-discovery-group
        namespace: nacos-discovery
        server-addr: 192.168.56.102:8848,192.168.56.104:8848,192.168.56.105:8848
        file-extension: yml
        prefix: ${spring.application.name}
      discovery:
        group: nacos-discovery-group
        namespace: nacos-discovery
        server-addr: 192.168.56.102:8848,192.168.56.104:8848,192.168.56.105:8848
        weight: 1

server:
  port: 8081
  1. 创建TestController
@RestController
public class TestController {
    
    //注入当前实例端口信息
    @Value("${server.port}")
    private int port;
    @GetMapping("/service")
    public String service(){
        return "provider service.i am from port " + port ;
    }
}
  1. 启动项目


打开nacos面板,点击服务列表,未找到该服务。那是因为未创建命名空间所致,在nacos面包创建nacos-discovery命令空间

再次点击服务列表



创建服务消费者


  1. 创建nacos-discovery-consumer模块
  2. 同上引入相同依赖
  3. 创建ConsumerApplication主类
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}
  1. 配置bootstrap.yml
spring:
  application:
    name: nacos-discovery-consumer
  cloud:
    nacos:
      config:
        group: nacos-discovery-group
        namespace: nacos-discovery
        server-addr: 192.168.56.102:8848,192.168.56.104:8848,192.168.56.105:8848
        file-extension: yml
        prefix: ${spring.application.name}
      discovery:
        group: nacos-discovery-group
        namespace: nacos-discovery
        server-addr: 192.168.56.102:8848,192.168.56.104:8848,192.168.56.105:8848

server:
  port: 9091

5.服务调用方需要配置负载均衡,此处利用restTemplate去发起调用


新建一个LoadConfiguration类,配置RestTemplate实例


需要显示标注该@LoadBalanced注解开启服务注册的负载均衡


tips:@LoadBalanced标注了RestTemplate后,RestTemplate可以不用ip加端口的形式访问服务提供方,而是通过在注册中心注册的服务名称通过负载均衡策略,选取服务注册的地址,端口等信息,然后发起调用,并返回。也就是说@LoadBalanced提供了负载均衡和动态获取地址,端口等功能


@Configuration
public class LoadConfiguration {
    @Bean
    @LoadBalanced //该注解一定不能忘记
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
  1. 创建TestController
@RestController
public class TestController {
    @Value("${server.port}")
    private int port;
    @Resource
    private RestTemplate restTemplate;
    @GetMapping("/service")
    public String service(){
        return "consumer service.from:" + port +"\t to \t" + restTemplate.getForObject("http://nacos-discovery-provider/service", String.class);
    }
}

6.启动项目,查看nacos面板,观察nacos-discovery-consumer是否注册到nacos中



  1. 测试,浏览器访问http://localhost:9091/service,实际是访问consumer,通过consumer访问provider服务,返回信息
浏览器返回信息如下,consumer service.from:9091 to provider service.i am from port 8081
  1. 打开nacos-discovery-provider应用的多实例启动,配置server.port为8082,并启动8082端口实例



当8082启动完成后,打开nacos面包,观察nacos-discovery-provider信息变化


image.png


多次访问http://localhost:9091/service,观察返回变化

consumer service.from:9091 to provider service.i am from port 8082

consumer service.from:9091 to provider service.i am from port 8081


可以看到返回在8081,和8082之间反复,证明当前服务调用的负载策略为轮询


nacos discovery 配置


image.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
6月前
|
人工智能 Java API
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
3.1.0 发布核心全新功能-Agent 注册中心,助力构建基于 A2A 协议的多 Agent 协作的AI应用,同时 MCP 注册中心适配最新 MCP 官方注册中心协议及升级优化多项核心功能。
1754 63
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
1400 3
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
4846 14
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
276 5
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
564 2
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
367 4
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
305 3
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
803 3
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
31286 8
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
Kubernetes Nacos 容器
nacos注册不上
我正在使用开源的Nacos,并已在Kubernetes中部署了Nacos服务,通过端口映射可在集群外访问Nacos控制台。Kubernetes使用NodePort类型暴露了8848、9848、9849、7848和9555端口,但在尝试注册时遇到问题,出现“Client not connected, current status: STARTING”的错误,导致启动失败。
280 1
下一篇
开通oss服务