微服务系列:nacos注册中心实战

本文涉及的产品
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 微服务系列:nacos注册中心实战

前言


上一篇文章介绍了nacos作为配置中心如何在spring cloud中使用。今天介绍nacos作为注册中心在在spring cloud中使用


一、官方文档


官方文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html


二、原理说明


21.png


三、实战演示


上一篇中建立了bank1工程演示nacos作为配置中心的使用,在本章中新建bank2工程,然后通过ServicID来请求bank1中的接口。


服务提供者bank1

1、添加依赖

<!-- nacos注册中心-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>


2、新增注册中心配置

spring.application.name=bank2
server.port=8020
spring.profiles.active=dev
spring.cloud.nacos.username=nacos_bank1
spring.cloud.nacos.password=123456
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=a284481e-b623-4c7d-a65a-e9009cba5f57
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=a284481e-b623-4c7d-a65a-e9009cba5f57


3、@EnableDiscoveryClient 开启服务发现

@Slf4j
@EnableDiscoveryClient
@SpringBootApplication
@RefreshScope
public class Bank1Application {
  public static void main(String[] args) {
  SpringApplication.run(Bank1Application.class, args);
  log.info("bank1服务启动成功");
  }
}


服务消费者者bank2

1、添加依赖

下面是我maven依赖配置。同样需要注意版本的对应关系。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.laowan</groupId>
    <artifactId>spring-cloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>bank2</name>
    <description>bank2工程</description>
    <properties>
        <java.version>1.8</java.version>
        <skipTests>true</skipTests>
    </properties>
    <dependencies>
        <!--nacos配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
       <!-- nacos注册中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


2、添加注册中心属性

spring.application.name=bank2
server.port=8020
spring.profiles.active=dev
spring.cloud.nacos.username=nacos_bank1
spring.cloud.nacos.password=123456
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=a284481e-b623-4c7d-a65a-e9009cba5f57
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=a284481e-b623-4c7d-a65a-e9009cba5f57


说明:

这里采用和bank1中相同的用户nacos_bank1,配置的用户需要对对应的注册中心的命名空间具有读写权限。且注册中心配置成和bank1中相同值,因为经测试发现只有相同命名空间的服务之间,才能通过ServiceID进行识别。


3、@EnableDiscoveryClient 开启服务发现

通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:

@Slf4j
@EnableDiscoveryClient
@SpringBootApplication
@RefreshScope
public class Bank2Application {
  @LoadBalanced
  @Bean
  public RestTemplate restTemplate() {
  return new RestTemplate();
  }
  public static void main(String[] args) {
  SpringApplication.run(Bank2Application.class, args);
  log.info("bank2服务启动成功");
  }
}


配置服务消费者,从而服务消费者可以通过 Nacos 的服务注册发现功能从 Nacos server 上获取到它要调用的服务。


声明了RestTemplate对象,并添加了@LoadBalanced注解。


4、调用bank1接口

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
    @Value("${bank.name}")
    private String bankName;
    @Autowired
    private RestTemplate restTemplate;
    @RequestMapping("/get")
    public String get() {
        return bankName;
    }
    @GetMapping(value = "/getBank1")
    public String getBank1() {
        return restTemplate.getForObject("http://bank1/config/get" , String.class);
    }
}


四、效果测试


1、启动bank1和bank2

在nacos控制台的服务列表中的bank1命名空间中,查看到服务名为bank1和bank2的2个服务。说明服务注册成功

20.png


2、通过ServcieID请求

请求bank2中的接口,调用bank1中/config/get接口来获取bank.name的属性。

请求链接:http://localhost:8020/config/getBank1

成功获取到bank1的属性。说明ServiceID为bank1的服务可以被bank2服务识别。

19.png

3、服务上线和下线

在bank1服务的详情界面,控制bank1服务下线。

18.png

再次请求http://localhost:8020/config/getBank1

这里需要注意:bank2服务从注册中心拉去的服务状态列表的list会有一定的时间的缓存。每隔一段时间重新拉取服务列表后,才会刷新bank1服务的本地状态,从而不能调用。所以测试的时候会发现虽然进行了bank1服务的下线操作,但是开始一段时间接口还是可以调用成功,稍等一会,bank1服务才会调用失败。

17.png


当控制服务bank1上线后,重新请求接口又能正常访问。


总结


采用nacos作为注册中心结合spring cloud使用非常简单。

主要有以下几步:

1、首先正确引入对应的maven依赖,需要注意jar包版本的对应关系。

2、配置nacos注册中心的相关属性,需要注意命名空间保持一致且配置的用户具有命名空间的读写权限。

3、启动类上添加@EnableDiscoveryClient开启服务发现

微服务之间的调用,本例中采用的是restTemplate。实际项目中更推荐采用Feign调用,由于非常简单,这里就不做演示。


需要注意的是,服务提供者和服务消费者配置的nacos命名空间一定要是同一个,否则尽管配置的用户具有多个命名空间的读写权限也不能识别,即不同命名空间的服务是不能相互识别的。

目录
相关文章
|
4月前
|
人工智能 安全 Nacos
Nacos 3.0:微服务与AI融合的技术新纪元
Nacos 3.0:微服务与AI融合的技术新纪元
300 83
|
3月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
679 3
|
4月前
|
人工智能 安全 Java
Nacos 3.0:从微服务治理到AI服务治理的跃迁
Nacos 3.0:从微服务治理到AI服务治理的跃迁
315 5
|
4月前
|
人工智能 自然语言处理 安全
Nacos 3.0:微服务与AI融合的新一代动态治理平台
Nacos 3.0:微服务与AI融合的新一代动态治理平台
307 2
|
1月前
|
人工智能 Java API
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
3.1.0 发布核心全新功能-Agent 注册中心,助力构建基于 A2A 协议的多 Agent 协作的AI应用,同时 MCP 注册中心适配最新 MCP 官方注册中心协议及升级优化多项核心功能。
490 15
|
1月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
1月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
3月前
|
负载均衡 监控 Java
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
在微服务架构中,高可用与稳定性至关重要。本文详解熔断、限流与负载均衡三大关键技术,结合API网关与Hystrix-Go实战,帮助构建健壮、弹性的微服务系统。
455 1
微服务稳定性三板斧:熔断、限流与负载均衡全面解析(附 Hystrix-Go 实战代码)
|
4月前
|
人工智能 自然语言处理 Nacos
Nacos 3.0:微服务与AI融合的全新治理平台
Nacos 3.0:微服务与AI融合的全新治理平台
249 46

热门文章

最新文章