Nacos注册中心实战(二)

简介: Nacos注册中心实战

集群模式

环境:Ubuntu 18.04 LTS 三台,地址分别为:

192.168.2.11:8848

192.168.2.12:8848

192.168.2.13:8848

没有三台的小伙伴可以搭建一个伪集群用于测试,如127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850

集群模式搭建十分简单,具体步骤如下:

  1. 将单机模式的配置复制三份到每个节点中
  2. 在每个节点的conf文件夹下新建cluster.conf,配置如下
192.168.2.11:8848
192.168.2.12:8848
192.168.2.13:8848
  1. 依次启动各个节点
bash startup.sh

这样子nacos集群就搭建好了,但是在浏览器访问时我们还需要一个nginx做负载均衡

变变变,变成一个nginx,如果没有nginx的小伙伴可以参考安装Nginx

  1. 配置反向代理
server {
    listen 8850;
    server_name _;
    location / {
       proxy_pass http://nacos-server;
    }
}
upstream nacos-server {
  server 192.168.2.13:8848 weight=5;
  server 192.168.2.12:8848 weight=5;
  server 192.168.2.11:8848 weight=5;
}

访问

由于我的Nginx在192.168.2.11上,所以我的访问地址为:192.168.2.11:8848/nacos,初始账号密码同单机模式:nacos | nacos

Nacos Spring Cloud

Nacos已经搭建好了,接下来就是使用了。

下面阿鉴给大家介绍一下如何在Spring Cloud项目中使用Nacos

基本使用

新建项目

  1. 新建一个my-micro-service-demo项目,并在pom.xml中增加Spring Cloud相关依赖
<properties>
  <java.version>1.8</java.version>
  <spring.cloud-version>Hoxton.SR8</spring.cloud-version>
  <spring.cloud.alibaba-version>2.2.5.RELEASE</spring.cloud.alibaba-version>
</properties>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring.cloud-version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${spring.cloud.alibaba-version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
  1. 在项目中增加两个子模块,分别为my-ordermy-goods, 并引入Nacos的依赖
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 编写bootstrap.yaml配置文件
server:
  port: 8080
spring:
  application:
    name: my-order
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.2.11:8850
        username: nacos
        password: nacos
management:
  endpoints:
    web:
      exposure:
        include: "*"

商品服务修改一下服务名和端口号即可

  1. 编写启动类
package com.my.micro.service.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * @author Zijian Liao
 * @since 1.0.0
 */
@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}
  1. 启动项目,查看Nacos控制台

服务注册成功

发起调用

服务已经注册到Nacos上了,接下来,我们尝试使用订单服务调用商品服务吧

在画的原理图中,订单服务是使用的一个调用组件调用商品服务,大家先不必关心这个调用组件是什么,关于这部分内容,阿鉴会在后续的文章中详解介绍。

  1. 在商品服务中编写一个接口
@RestController
@RequestMapping("/goods")
public class GoodsController {
    @GetMapping("/get")
    public String get(){
        return "商品服务响应了一个苹果";
    }
}
  1. 在订单服务中注入调用组件
  @LoadBalanced
  @Bean
  public RestTemplate restTemplate(){
    return new RestTemplate();
  }

增加@LoadBalanced注解会使RestTemplate增加基于服务名进行调用的功能

  1. 发起调用
@RestController
@RequestMapping("/order")
public class OrderController {
    @Resource
    private RestTemplate restTemplate;
    @GetMapping("/get")
    public String get(){
        // 旧方式:restTemplate.getForObject("http://127.0.0.1:8081/goods/get", String.class)
        // 现在直接使用服务名即可发起调用
        return restTemplate.getForObject("http://my-goods/goods/get", String.class);
    }
}
  1. 测试

优雅上下线

Nacos还提供服务实例的上下线操作,在服务详情页面,可以点击实例的上线或者下线按钮,被下线的实例,将不会再被服务所获取。

当然,前面也提到了,由于缓存的原因,服务下线后,调用方并不能立即感知到,需要等待一定的时间。

那么,这个功能可以用来做什么呢?

假设商品服务需要升级

运行版本:v1.0.0

升级版本:v1.1.0

我们先将v1.1.0部署到生产环境中,此时商品服务便有了两个实例v1.0.0和v1.1.0,紧接着我们需要将旧版本下线

如果我们直接停止服务,此时商品服务正在处理业务,业务被中断,造成的后果不可估摸。

如果我们先将v1.0.0下线,等待一段时间,此时便不会有服务再访问v1.0.0了,便可以安全停止服务了。

命名空间

在以往的注册中心里,一般都是一个注册中心只对应一整个微服务系统,这是因为只要有服务注册到了注册中心上,那么只要在这个注册中心上的服务,都是可以相互访问的,这样就造成了每一个微服务系统,都要有一个自己的注册中心,比如Eureka。

这就会造成一个资源浪费的问题,因为一个注册中心明明是可以注册成千上万的实例的(Nacos服务发现性能测试报告),所以,Nacos还给我们提供了命名空间的功能,这使得服务与服务之间拥有了隔离机制(同一个命名空间下的服务才能相互访问),这样,每个命名空间便可以对应一个微服务系统。

  1. 新增命名空间
    新增一个dev命名空间与test命名空间

  2. 修改服务配置
    修改my-goods, 让my-goods处于dev命名空间下
server:
  port: 8081
spring:
  application:
    name: my-goods
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.2.11:8850
        namespace: dev
        username: nacos
        password: nacos
  1. 修改my-order, 让my-order处于test命名空间下
server:
  port: 8080
spring:
  application:
    name: my-order
  main:
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.2.11:8850
        namespace: test
        username: nacos
        password: nacos
  1. 重启服务
    查看Nacos控制台
    my-goods

    my-order

  2. 测试

此时服务已经隔离了

小结

关于注册中心和Nacos的基本知识已经介绍完了,现在我们来总结一下吧。

首先,注册中心是一个具备了服务注册,服务发现,服务健康检查等能力的服务,通过它我们能够轻松地对服务进行管理,在此之上,Nacos还实现了优雅上下线,命名空间等功能,最后,我们还通过一个案例对这些功能进行了演示。

下篇,阿鉴会给大家介绍Nacos的另一项能力:配置中心。

案例地址:https://gitee.com/lzj960515/my-micro-service-demo.git

目录
相关文章
|
30天前
|
存储 运维 监控
NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
【2月更文挑战第33天】NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
75 2
|
1月前
|
Java 网络安全 Nacos
nacos注册不上刷这个错,有解决方案吗?
【2月更文挑战第30天】nacos注册不上刷这个错,有解决方案吗? springboot项目,瘦身打包后,用java -jar 外置依赖和外置配置文件启动的时候,nacos注册不上刷这个错,有解决方案吗? com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING
89 1
|
15天前
|
Dubbo Java 应用服务中间件
深度剖析:Dubbo使用Nacos注册中心的坑
2020年笔者在做微服务部件升级时,Dubbo的注册中心从Zookeeper切换到Nacos碰到个问题,最近刷Github又有网友提到类似的问题,就在这篇文章里做个梳理和总结。
深度剖析:Dubbo使用Nacos注册中心的坑
|
15天前
|
SpringCloudAlibaba Java Nacos
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)
|
29天前
|
运维 Kubernetes Nacos
nacos常见问题之服务注册IP白名单如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
23 0
|
29天前
|
安全 前端开发 Nacos
nacos常见问题之配置注册的白名单如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
83 0
|
30天前
|
Nacos 数据库 Docker
nacos常见问题之docker部署的seata,成功注册到nacos运行报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
39 2
|
30天前
|
Kubernetes Nacos 微服务
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
24 1
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
|
1月前
|
负载均衡 Java Nacos
python flask服务如何注册到nacos
一文讲清楚python flask服务如何注册到nacos
89 2
python flask服务如何注册到nacos
|
30天前
|
Dubbo 关系型数据库 MySQL
nacos常见问题之命名空间配置数据上线修改如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
92 1