+Springcloud微服务注册中心之Consul

现在市面上越来越多的企业采用分布式微服务来搭建项目,而在微服务架构中,注册中心是其核心的基础服务之一。注册中心的作用是提供完善实现服务治理功能,而选择什么注册中心也是微服务项目架构中的一环。
一、什么是注册中心
       在现实生活中,当我们想要联系某一个人的时候,我们会拿出手机,打开通讯录,找到那个人的电话号码,然后拨出去,之后只要那个人接了电话,我们就可以通话了。其实,注册中心就相当于这个“通讯录”,只不过这个“通讯录”中记录服务与服务地址的映射关系。在微服务架构中,如果服务A想要调用服务B时,就需要到注册中心里面找到服务B的地址,之后进行调用,如下图:

二、注册中心的作用
      前面我们知道注册中心是什么,那么注册中心有什么用呢。如果仅仅是在注册中心中找到服务与服务地址的映射关系,那么不一定需要单独的服务来去管理这些。在分布式系统中,需要考虑更多更复杂的问题:如服务在注册之后,如何被及时的发现;服务宕机后,如何及时下线;服务如何进行扩展;服务出现异常时,如何进行处理等等一系列问题。而这些问题的解决都依赖与注册中心。
       在我看来,注册中心解决了服务的注册与发现,同时给与其他问题解决提供了支持。
三、常见的注册中心
       在java体系中,我们常见的注册中心有Dubbo,Eureka,Nacos,Consul等,具体采用哪种,就见仁见智了,我们下面要讲的就是Consul。
四、Consul简介
       Consul 是 HashiCorp 公司推出的开源工具,官方网址:https://www.consul.io/ ,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等)。使用起来也较 为简单。Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux、windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。
五、Consul工作原理
工作原理如下图:

具体流程如下:

  • 1、当 Producer 启动的时候,会向 Consul 发送一个 post 请求,告诉 Consul 自己的 IP 和 Port
  • 2、Consul 接收到 Producer 的注册后,每隔10s(默认)会向 Producer 发送一个健康检查的请求,检验Producer是否健康
  • 3、当 Consumer 发送 GET 方式请求 /api/address 到 Producer 时,会先从 Consul 中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到 Producer 的 IP 和 Port 后再发送 GET 方式请求 /api/address
  • 4、该临时表每隔10s会更新,只包含有通过了健康检查的 Producer



六、Consul安装
    可以直接去官网下载,下载地址:https://www.consul.io/downloads.html。

下载后,解压到一个没有中文的目录下,之后以管理员身份运行cmd,进入Consul目录,运行下面的命令:
 

[Shell] 纯文本查看 复制代码

?

1

2

consul agent -dev -ui -node=cy

# -dev开发服务器模式启动,-node结点名为cy,-ui可以用界面访问,默认能访问


访问http://localhost:8500/,看到下面的界面表示成功:

七、使用Consul作为注册中心整合springcloud
使用maven创建工程ConsulTest,在pom.xml中引入依赖:

[XML] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

<parent>

        <groupId>org.springframework.bootgroupId>

        <artifactId>spring-boot-starter-parentartifactId>

        <version>2.1.4.RELEASEversion>

        <relativePath/>

    parent>

<dependencies>

        

        <dependency>

            <groupId>org.springframework.bootgroupId>

            <artifactId>spring-boot-starter-webartifactId>

        dependency>

        <dependency>

            <groupId>org.springframework.cloudgroupId>

            <artifactId>spring-cloud-starter-consul-discoveryartifactId>

        dependency>

    dependencies>


创建配置文件application.yml

创建启动类:

[Java] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

@SpringBootApplication

@EnableDiscoveryClient

@RestController

public class ConsulApp {

 

    public static void main(String[] args) {

        SpringApplication.run(ConsulApp.class, args);

    }

    @GetMapping("/testConsul")

    public String testConsul(){

        return "注册进入consul成功!";

    }

}


运行测试类,在Consul界面查看服务:

之后在浏览器中访问http://localhost:8083/testConsul,出现对应输出则为成功。

你可能感兴趣的:(+Springcloud微服务注册中心之Consul)