美文网首页
微服务架构 | 3.4 HashiCorp Consul 注册中

微服务架构 | 3.4 HashiCorp Consul 注册中

作者: 多氯环己烷 | 来源:发表于2022-01-18 08:24 被阅读0次

    前言

    参考资料
    《Spring Microservices in Action》
    《Spring Cloud Alibaba 微服务原理与实战》
    《B站 尚硅谷 SpringCloud 框架开发教程 周阳》
    《Consul 官网》

    Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发。它提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案;


    1. Consul 基础知识

    1.1 Consul 是什么

    • Consul 是一套开源的分布式服务发现和配置管理系统,由 HashiCorp 公司用 Go 语言开发;
    • 提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之 Consul 提供了一种完整的服务网格解决方案;
    • 它具有很多优点。包括:基于 raft 协议,比较简洁; 支持健康检查,同时支持 HTTP 和 DNS 协议支持跨数据中心的 WAN 集群提供图形界面;跨平台,支持 Linux、Mac、Windows

    1.2 Consul 的特点

    • 服务发现:提供 HTTP 和 DNS 两种发现方式;
    • 健康监测:支持多种方式:HTTP、TCP、Docker、Shell 脚本定制化监控;
    • KV 存储:Key、Value的存储方式;
    • 多数据中心:支持多数据中心;
    • 可视化 Web 界面

    2. 安装并运行 Consul 服务器

    基于 Win10 下的 Consul 服务器安装;

    2.1 下载 Consul

    • 下载解压后:
    Consul 解压.png

    2.2 运行 Consul 服务器

    • 在 consul.exe 程序所在目录下打开 cmd 命令窗口;

    • 键入命令 consul ,显示下面说明安装成功;

      Consul 安装成功.png
    • 此时键入命令 consul agent -dev 使用开发模式启动;

    使用开发模式启动.png Consul 首页.png

    3. 使用 Consul 管理服务提供者

    使用 Consul 构建服务提供者大致与 Nacos 和 Zookeeper 相同;Nacos 与 Zookeeper 的构建方式详情请见《3.2 Alibaba Nacos 注册中心》与《3.3 Apache Zookeeper 注册中心》;

    3.1 引入 pom.xml 依赖

    <!--SpringCloud consul-server -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    

    3.2 修改 boostrap.yml 配置文件

    # consul 服务提供者端口
    server:
      port: 8006
    spring:
      application:
        name: consul-provider
    # consul 注册中心地址
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            #hostname: 127.0.0.1
            service-name: ${spring.application.name}
    

    3.3 在主启动类上添加注解

    • @EnableDiscoveryClient:使用其他组件(Nacos、zookeeper、Consul)作为注册中心;

    3.4 编写业务类,并在 controller 层开放接口

    这里编写一个简单接口仅作为示例;

    @RestController
    public class providerController{
        @Value("${server.port}")
        private String serverPort;
    
        @RequestMapping(value = "/provider/consul")
        public String providerConsul(){
            return "springcloud with consul: "+serverPort+"\t"+ UUID.randomUUID().toString();
        }
    }
    

    4. 使用 Consul 管理服务消费者

    使用 Consul 构建服务消费者大致与 Nacos 和 Zookeeper 相同;Nacos 与 Zookeeper 的构建方式详情请见《3.2 Alibaba Nacos 注册中心》与《3.3 Apache Zookeeper 注册中心》;

    4.1 引入 pom.xml 依赖

    • 同提供者;
    <!--SpringCloud consul-server -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-consul-discovery</artifactId>
    </dependency>
    

    4.2 修改 boostrap.yml 配置文件

    • 基本上同提供者;
    # consul 服务消费者端口号
    server:
      port: 80
    spring:
      application:
        name: consul-consumer
    # consul 注册中心地址
      cloud:
        consul:
          host: localhost
          port: 8500
          discovery:
            #hostname: 127.0.0.1
            service-name: ${spring.application.name}
    

    4.3 在主启动类上添加注解

    • 同提供者;
    • @EnableDiscoveryClient:使用其他组件(Nacos、zookeeper、Consul)作为注册中心;

    4.4 编写业务类

    • 由于我们使用 Ribbon + RestTemplate 的负载均衡策略,因此需要在 IoC 容器中添加一个 RestTemplate JavaBean;
    • 详情请见《4.1 基于 Ribbon 的负载均衡详解》;
    • 该 Bean 可以在主启动类中添加;也可以在主启动类所在包或子包的 config 包中添加,如下:
    @Configuration
    public class ApplicationContextBean{
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    }
    
    • 我们在 controller 层开放接口给客户端,并在该接口里调用提供者的 API;
    @RestController
    public class ComsumerConsulController{
        public static final String INVOKE_URL = "http://consul-provider";
    
        @Autowired
        private RestTemplate restTemplate;
    
        @RequestMapping(value = "/consumer/consul")
        public String paymentInfo(){
            String result = restTemplate.getForObject(INVOKE_URL+"/provider/consul", String.class);
            System.out.println("消费者调用提供者获取服务--->result:" + result);
            return result;
        }
    }
    

    最后

    \color{blue}{\rm\small{新人制作,如有错误,欢迎指出,感激不尽!}}

    \color{blue}{\rm\small{欢迎关注我,并与我交流!}}

    \color{blue}{\rm\small{如需转载,请标注出处!}}

    相关文章

      网友评论

          本文标题:微服务架构 | 3.4 HashiCorp Consul 注册中

          本文链接:https://www.haomeiwen.com/subject/dntkhrtx.html