A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wujianhui 于 2020-2-27 17:29 编辑

序言
       现在市面上越来越多的企业采用分布式微服务来搭建项目,而在微服务架构中,注册中心是其核心的基础服务之一。注册中心的作用是提供完善实现服务治理功能,而选择什么注册中心也是微服务项目架构中的一环。
一、什么是注册中心
       在现实生活中,当我们想要联系某一个人的时候,我们会拿出手机,打开通讯录,找到那个人的电话号码,然后拨出去,之后只要那个人接了电话,我们就可以通话了。其实,注册中心就相当于这个“通讯录”,只不过这个“通讯录”中记录服务与服务地址的映射关系。在微服务架构中,如果服务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] 纯文本查看 复制代码
consul agent -dev -ui -node=cy
# -dev开发服务器模式启动,-node结点名为cy,-ui可以用界面访问,默认能访问

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

七、使用Consul作为注册中心整合springcloud
使用maven创建工程ConsulTest,在pom.xml中引入依赖:
[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

创建启动类:
[Java] 纯文本查看 复制代码
@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,出现对应输出则为成功。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马