欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Springcloud微服务注册中心之Consul

程序员文章站 2022-05-23 11:09:47
...

序言
       现在市面上越来越多的企业采用分布式微服务来搭建项目,而在微服务架构中,注册中心是其核心的基础服务之一。注册中心的作用是提供完善实现服务治理功能,而选择什么注册中心也是微服务项目架构中的一环。
一、什么是注册中心
       在现实生活中,当我们想要联系某一个人的时候,我们会拿出手机,打开通讯录,找到那个人的电话号码,然后拨出去,之后只要那个人接了电话,我们就可以通话了。其实,注册中心就相当于这个“通讯录”,只不过这个“通讯录”中记录服务与服务地址的映射关系。在微服务架构中,如果服务A想要调用服务B时,就需要到注册中心里面找到服务B的地址,之后进行调用,如下图:
Springcloud微服务注册中心之Consul
二、注册中心的作用
      前面我们知道注册中心是什么,那么注册中心有什么用呢。如果仅仅是在注册中心中找到服务与服务地址的映射关系,那么不一定需要单独的服务来去管理这些。在分布式系统中,需要考虑更多更复杂的问题:如服务在注册之后,如何被及时的发现;服务宕机后,如何及时下线;服务如何进行扩展;服务出现异常时,如何进行处理等等一系列问题。而这些问题的解决都依赖与注册中心。
       在我看来,注册中心解决了服务的注册与发现,同时给与其他问题解决提供了支持。
三、常见的注册中心
       在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工作原理
工作原理如下图:
Springcloud微服务注册中心之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。
Springcloud微服务注册中心之Consul
下载后,解压到一个没有中文的目录下,之后以管理员身份运行cmd,进入Consul目录,运行下面的命令:

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

访问http://localhost:8500/,看到下面的界面表示成功:
Springcloud微服务注册中心之Consul
七、使用Consul作为注册中心整合springcloud
使用maven创建工程ConsulTest,在pom.xml中引入依赖:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/><!--表示每次都不从本地仓库找jar包,优先从*仓库找-->
    </parent>
<dependencies>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>
    </dependencies>

创建配置文件application.yml
Springcloud微服务注册中心之Consul
创建启动类:

@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界面查看服务:
Springcloud微服务注册中心之Consul
之后在浏览器中访问http://localhost:8083/testConsul,出现对应输出则为成功。