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

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 微服务系列: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命名空间一定要是同一个,否则尽管配置的用户具有多个命名空间的读写权限也不能识别,即不同命名空间的服务是不能相互识别的。

目录
相关文章
|
19天前
|
存储 缓存 负载均衡
Nacos注册中心
Nacos注册中心
43 1
Nacos注册中心
|
3天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
25 5
|
18天前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
31 4
|
18天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
38 3
|
18天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
29 3
|
22天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
60 4
|
1月前
|
Java Nacos 微服务
微服务中间件之Nacos
Nacos是阿里巴巴开源的动态服务发现、配置管理和服务管理平台,支持服务注册与发现、配置管理及服务健康监测。采用Spring Cloud、Spring Boot、Raft算法等技术,适用于微服务架构和云原生应用,提供简单易用的安装部署方式和丰富的应用场景。
168 2
|
2月前
|
运维 持续交付 API
深入理解并实践微服务架构:从理论到实战
深入理解并实践微服务架构:从理论到实战
137 3
|
2月前
|
Kubernetes Nacos 容器
nacos注册不上
我正在使用开源的Nacos,并已在Kubernetes中部署了Nacos服务,通过端口映射可在集群外访问Nacos控制台。Kubernetes使用NodePort类型暴露了8848、9848、9849、7848和9555端口,但在尝试注册时遇到问题,出现“Client not connected, current status: STARTING”的错误,导致启动失败。
|
1月前
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
64 0
下一篇
无影云桌面