spring cloud consul 使用以及和eureka的区别

21 篇文章 0 订阅
13 篇文章 0 订阅

现在在做供应链项目,项目还是一套微服务架构体系。注册中心从之前用的eureka换到了consul。架构的理由估计是eureka不更新了吧。所以来学习一下consul的内容。

最近比较忙,我也不再单独查资料了,就把自己知道的写出来好了。如有错误请指正哈。

什么是consul

consul是一个spring cloud 中集成好的开源的分布式的服务注册发现中心。由Go语言编写。支持健康检查,多数据中心还支持k-v存储,采用RAFT一致性算法,保证强一致性,可用性。并且和docker完美兼容。

 

consul和eureka区别

Eureka优点是注册速度很快,不管同步到其他节点时是否有问题,只要服务注册到主节点既代表注册成功。牺牲了一致性,但是保证了高可用性和最终一致性。即使当前节点因为一些问题没有注册成功,那么也会通过其他节点找到当前服务,返回元数据。
和eureka相比,consul注册就稍慢一些了。上面提到了,consul是强一致性的,所以consul注册服务是先注册,然后同步到各节点,raft算法使consul在有一半以上的节点注册成功时才证明服务注册成功。这样保证了数据的一致性。但也因为这样,导致注册服务相对较慢,并且当主节点挂掉之后,重新选举时整个consul不可用。可以说是牺牲了一部分可用性换来的一致性。

那么如何选择呢?

还是看需求吧,目前eureka已经不再更新,不过功能已经够用。我觉得还是要看是要保证一致性还是可用性了。

 

consul使用

收线下载consul。地址:https://www.consul.io/downloads.html

然后我们使用一个bat启动一下consul。

@echo off
consul agent -dev -client 127.0.0.1 -ui
pause

这里使用consul给我们提供的dev模式,指定本机IP。

启动后访问:http://localhost:8500/ui/dc1/services

会看到这个页面:

这里我们的consul已经启动完成了。和eureka不同的是他不用使用idea启动,直接下载即可。

 

然后我们需要一个生产者和一个消费者,其实consul也是支持ribbon的。所以我们这里模拟2个生产者。一个消费者。看消费者会不会负载均衡的调用生产者。

这里就简单写了。回头会把源码上传一份。

spring boot版本2.1.5.release spring cloud 版本Greenwich.SR1.

配置一下要注册到consul的生产者依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

这里注意两点,一个是版本号要对应,spring boot 2.1.x以上版本要使用Greenwich版本的spring cloud 不然无法兼容。

第二个是注册consul要有两个依赖,之前看了一个资料写只需要spring-cloud-starter-consul-discovery。其实是不行的。

然后是yml:

server:
  port: 8082
spring:
  application:
    name: consul-producer
  cloud:
    consul:
      host: 127.0.0.1 #consul的IP
      port: 8500 #consul启动端口默认8500
      discovery:
        healthCheckPath: /actuator/health  #健康检查路径
        healthCheckInterval: 15s #健康检查频率
        hostname: 127.0.0.1 #注册服务所在IP
        port: ${server.port}  #注册服务所在端口
        service-name: ${spring.application.name} #注册服务名
        register: true #是否启动注册
        register-health-check: true #是否启动健康检查

后面还是启动类添加注解:

@EnableDiscoveryClient

生产者和消费者都需要这么配置。

具体的测试代码我就不放出来了。服务间调用还是使用的openfeign做的。

我把内容放在下载里面。大家下载下来看一下就知道了。

测试时,需要注意的是,先打开IDEA的多端口启动,然后8081启动一个producer,8082启动一个producer。

重复请求consumer。会发现每次调用的producer是不一样的。而且控制台会打印出ribbon的日志。所以consul也是支持负载均衡的轮询方式的负载均衡的。

 

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值