SpringCloud系列教程03-服务注册之Consul


概述

在第一节SpringCloud服务注册与发现之Eureka中,讲述了基于Eureka的服务中心的构建,为什么还需要Consul呢?

当然是因为它更好用、更好看了!

Consul官网:https://www.consul.io/

Spring官网关于consul的描述:https://spring.io/projects/spring-cloud-consul

Spring Cloud Consul provides Consul integrations for Spring Boot apps through autoconfiguration and binding to the Spring Environment and other Spring programming model idioms…The patterns provided include Service Discovery, Distributed Configuration and Control Bus.

Consul提供了一个快速开发SpringCloud的集成环境,支持服务注册、Ribbon与负载均衡、Zuul、分布式配置、控制总线。

这一篇文章将详细描述使用consul作为服务注册中心、使用Feign来做服务调用的案例。

要使用consul作为服务注册中心,首先需要下载它。


安装和配置consul

从官网下载consul:https://www.consul.io/

支持macOs/FreeBSD/Linux/Solaris/Windows,下载压缩包并解压后,会得到一个可执行文件(在win系统下是consul.exe文件)
在这里插入图片描述

选择对应版本,下载,解压,然后将它的地址添加到系统环境变量中(这一步自行百度即可)

然后使用命令consul agent -dev运行开发环境:
在这里插入图片描述

打开浏览器,输入consul默认的可视化地址localhost:8500:

在这里插入图片描述

到这一步,consul已经启动成功了。

下一步,我们更改在上一篇文章服务调用之Feign中的项目,将eureka的依赖和配置改成consul的即可。其他信息在此就不予赘述了。


服务提供者

这里我们修改一下上一篇文章服务调用之Feign中的项目。

引入consul-discovery依赖,代替eureka-server

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 服务治理 consul -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

        <!-- 健康检查 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <!-- 省略... -->
    </dependencyManagement>

修改application.yml配置文件:

server:
  port: 8505

spring:
  application:
    name: service-producer
  cloud:
    consul:
      host: localhost
      port: 8500 # consul默认端口
      discovery:
        register: true
        instance-id: ${spring.application.name}:${server.port}
        service-name: ${spring.application.name}
        port: ${server.port}

然后在启动类上,只能使用@EnableDiscoveryClient注解来启用服务发现。

服务调用者

与服务提供者相同,引入consul配置即可。具体可以到git上看项目代码示例。


测试

分别启动consul,service-producer, service-consumer,可以看到两个服务已经注册成功:

在这里插入图片描述

下面测试一下接口:

首先单独测试一下服务service-producer:

在这里插入图片描述

然后测试一下service-consumer去调用service-producer:

在这里插入图片描述


这里有一个问题,当使用Consul来进行服务治理时,如果SpringBoot和SpringCloud版本不匹配,可能会出现服务注册没有执行的情况,但是控制台不会有错误信息。

比如SpringBoot采用2.1.7.RELEASE版本,而SpringCloud采用Finchley.RELEASE版本,就会出现这个问题。

必须看到Spring项目控制台出现以下信息,才说明服务注册被启动了:

2019-08-28 15:33:52.881  INFO 11392 --- [           main] o.s.c.c.s.ConsulServiceRegistry          : Registering service with consul: NewService{id='service-consumer-8506', name='service-consumer', tags=[secure=false], address='DESKTOP-V748F38', port=8506, enableTagOverride=null, check=Check{script='null', interval='10s', ttl='null', http='http://DESKTOP-V748F38:8506/actuator/health', tcp='null', timeout='null', deregisterCriticalServiceAfter='null', tlsSkipVerify=null, status='null'}, checks=null}


总结

从上面的示例可以看出,consul比eureka更加方便,功能更加复杂。而eureka的使用必须要创建一个eureka服务,并且需要手动进行配置。


源码地址

https://github.com/laolunsi/spring-cloud-examples/tree/master/03-ServiceDiscoveryConsul


参考资料

  1. SpringCloud构建微服务架构-服务注册与发现(Eureka、Consul)【Dalston版】:http://blog.didispace.com/spring-cloud-starter-dalston-1/
  2. 纯洁的微笑-SpringCloud专栏13-注册中心 Consul使用详解:http://www.ityouknow.com/springcloud/2018/07/20/spring-cloud-consul.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:终极编程指南 设计师:CSDN官方博客 返回首页
评论

打赏作者

eknown

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值