SpringCloud Alibaba入门到实战 (二): Nacos 服务注册中心

微服务、Spring Cloud和SpringCloud Alibaba的相关介绍可以阅读我上一篇文章什么是微服务,为什么会有SpringCloud Alibaba?

1.Nacos介绍

分布式微服务架构中,传统的单体服务被切割成了一个个微服务。比如一个典型的电商系统中,有商品服务、订单服务、仓储服务、物流服务等,这些服务之间相互调用;共同为用户提供服务,但是每个服务可能都部署在不同的机器上,服务之间互相调用的时候;怎么知道对方的的IP和端口呢?当然我们可以将手动的将所有的服务的IP和端口都存储在某个位置,但是当业务高峰期需要扩容的时候或需求变更时;频繁的修改配置太过麻烦也容易出错。

Nacos就是用来解决这些问题的,它是一个更易于构建云原生应用的动态服务发现配置管理和服务管理平台。

2.动态服务发现和配置管理

在每个服务部署完成并启动的时候,将自己的IP和端口等信息告诉Nacos,也就是在Nacos进行服务注册;而一个服务想要调用另一个服务的时候,会先去Nacos中查看另一个服务的IP和端口,然后发送请求。当某个服务停止或故障的时候,Nacos一段时间内收不到该服务的心跳包,就会删除该服务的注册信息。

另外,每个服务的各项配置可能不尽相同,传统开发中,如果要修改某个配置的话,肯定是需要修改配置文件然后重启;在微服务架构中,如果有几十个服务都要修改配置,显然一个一个修改并重启是不太合适的;这就需要引入Nacos做配置中心,在Nacos上根据不同的环境写好配置文件;在服务中只需要指定该服务使用哪个配置文件即可,如果配置文件有修改,也只需要修改Nacos上的配置文件即可;服务的配置会自动同步,配置中心部分下文会做出详细的说明和演示。

值得一提的是在Spring Cloud中服务注册中心和配置中心是分成两个独立的组件Eurka或Config,但Nacos后来者居上;借鉴(抄)了两者的设计思想,将服务注册中心和服务配置中心合并成了一个组件。并优化了一些原组件的不足之处。经过了国内双十一等各种大型流量场景的考验。

3.安装

目前最新的版本是 2.0.2(截止2021年7月15日)

3.1下载

可以直接在github发布页上面下载需要的版本。

我已经下载了Linux和Windows版本,如果嫌外网网速太慢的朋友可以关注我的公众号【技术杂汇】或扫描下面的二维码,关注并回复【nacos】即可获得云盘下载链接

不吃姜微信公众号

3.2 Windows下启动

下载之后,解压即用无需安装;在Windows平台启动方式为,解压后进入bin目录

启动命令行工具,在当前目录下执行命令

startup.cmd -m standalone

-m 指定启动模式,standalone 为单机启动

看到如下输出即为启动成功

nacos启动成功

启动默认端口是8848,启动之后可以访问http://localhost:8848/nacos会访问到如下界面

,默认的账号的密码都是nacos,

nacos
这便是nacos的管理界面,里面的内容,后文会有详解。

4.项目实战

下面本文将演示在项目中如何进行服务注册

首先创建一个父项目spring-cloud-alibaba-demo

修改父项目的打包方式为pom,引入 Spring Boot和 SpringCloud Alibaba 的依赖管理

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.3.2.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

spring-boot-dependenciesspring-cloud-alibaba-dependencies不会引入任何依赖,只是在父工程中管理所有依赖的版本,父项目中已经指定的以来版本;子模块引入时就不需要再指定版本,避免依赖版本造成的问题。

父工程创建完成,接下来创建一个商品微服务commodity-provider-8081,并将它注册进Nacos

引入Nacos客户端-服务发现版(discovery),这里不需要指定版本;因为父工程中已经有依赖管理

<!-- web服务 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Nacos 客户端-注册中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 监控当前应用的健康状态 nacos 依赖于它 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

commodity-provider-8081的pom.xml

创建application.yml文件,主要的配置项如下

server:
  port: 8081
spring:
  application:
    name: commodity-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

management:
  endpoints:
    web:
      exposure:
        include: '*'

新建一个controller包并在这个包下创建一个简单的CommodityController类;用作的web接口测试。

@RestController
public class CommodityController {

    @GetMapping("/hello")
    public String hello() {
        return "hello nacos";
    }

}

创建服务启动类

@SpringBootApplication
@EnableDiscoveryClient
public class CommodityProvider8081 {

    public static void main(String[] args) {
        SpringApplication.run(CommodityProvider8081.class,args);
    }
}

@EnableDiscoveryClient注解的作用是,开启commodity-provider-8081服务作为Nacos客户端的身份,commodity-provider-8081服务以Nacos客户端的身份将自己注册到Nacos服务端,换句话说:Nacos是服务发现的服务端(server);commodity-provider-8081是服务发现的客户端(client)

访问http://localhost:8081/hello

web服务可以正常访问

再进入Nacos的界面http://localhost:8848/nacos

该服务已经成功注册,可以看到服务名称就是配置文件中的spring.application.name所对应的配置,并且有一个健康的实例;就是我刚才注册的这个。

本人能力有限,本文只是我个人的技术分享。如有错误或不实之处;恳请大家不吝赐教。可以在公众号【技术杂汇】留言讨论;本人定虚心学习。

如果这个篇文章帮到你,可以帮我点个赞吗或者点个关注,这将激励着我继续分享我的技术所得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值