spring-cloud(三)注册中心-Consul

spring-cloud-Hoxton.SR6 (三)注册中心-Consul

本文spring-cloud 版本为:hoxton.sr6

本文spring-boot版本为:2.2.x-2.3.x

​ 在前一篇中呢,咱们已经简单的了解了什么是注册中心,以及注册中心的作用。

​ 而且呢,还搭建了Eureka 注册中心 服务端客户端,毋庸置疑,其是微服务老牌注册中心,但是呢,近几年了,随着2.x版本停更,导致很多企业不得不选择其余一些活跃的注册中心进行微服务模块的开发。

​ 今天呢,咱们学习第二个注册中心 Consul

一、Consul 基本信息

# consul 简介
- consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。

- Consul用Golang实现,因此具有天然可移植性(支持Linux、Windows和Mac OS X);安装包仅包含一个可执行文件,方便部署。

- 官网地址: https://www.consul.io

- 其作为注册中心,不需要我们再像eureka 那般,额外再开发模块作为注册中心服务端,consul注册中心以额外程序行使启动

二、Consul下载安装启动

# 1.下载consul
- https://www.consul.io/downloads

image-20200816162845092

首先呢,开发嘛,咱们先下载个w10的瞅一瞅!

下载完成后,发现其就是一个exe执行文件罢了

image-20200816163251850

Win版
# 1.检测下载是否正确
- 在下载文件解压目录下 执行CMD命令 在cmd命令行中 输入 consul -v

image-20200816164037802

image-20200816164119519

如果出现版本号,则说明下载文件完成,那么可以直接启动了

# 2.执行启动命令
- consul agent -dev

image-20200816164305632

# 3.访问consul的web服务,默认服务端口是8500
- http://localhost:8500

image-20200816164425827

Linux版
# 1. 下载
- wget https://releases.hashicorp.com/consul/1.8.2/consul_1.8.2_linux_amd64.zip
# 也可直接在页面下载 下载好了上传到linux服务器上
- 我因为开始在页面下载了,所以直接传上去即可
# 2. 解压
- 在linux 目录中将文件进行解压 unzip consul_1.8.2_linux_amd64.zip 
# 3. copy 到 /usr/local/bin目录下
- 解压完成后 就只是一个 consul 执行文件
- 将执行文件 consul copy到 /usr/local/bin目录下

image-20200816171726063

# 4. 查看版本
- consul -v

image-20200816171813625

# 4. 后端运行启动
- nohup consul agent -dev -client 0.0.0.0 -ui &

image-20200816171936377

image-20200816173108983

Docker 版

一说起docker… 最近刚出的,Docker更新协议,禁止被列入美国实体清单的组织和个人使用,Docker Hub服务受限。

准确说,企业版 对于国内某些公司已经受限了,例如 华为、360 、科大讯飞等

但是,关于 Docker 开源软件是否受影响---------未来?谁知道呢,目前仍是可以

image-20200817214636057

image-20200817214735079

正式安装 so easy…

docker run -d  -p 8500:8500/tcp -v /data/consul/conf/:/consul/conf/ -v /data/consul/data/:/consul/data/  --name consul  consul agent -server -ui -bootstrap-expect=1 -client=0.0.0.0

image-20200817215618496

image-20200817220327173

三、Consul客户端开发

我们在官网下载并启动的呢,是consul注册中心服务端

所以呢,如果微服务架构选择使用consul 作为注册中心的话,无需像eureka 那般,针对注册中心服务端额外搭建一个项目,consul已经是自己搭建好了,我们只要启动服务端,然后将我们的微服务注册到注册中心即可

  • 创建项目并引入consul客户端依赖

image-20200816181013215

  • 编写微服务配置
server:
  port: 9001 #端口
spring:
  application:
    #服务名称
    name: service-product
  ###开始配置consul的服务注册
  cloud:
    consul:
      #consul服务器的主机地址 默认:localhost
      host: localhost
      #consul服务器的ip地址 默认:8500
      port: 8500
      discovery:
        #是否需要注册
        register: true
        #注册的实例ID (唯一标志)
        instance-id: ${spring.application.name}-1
        #服务的名称
        service-name: ${spring.application.name}
        #当前服务的请求端口
        port: ${server.port}
        #指定开启ip地址注册
        prefer-ip-address: true
        #当前服务所在 ip ${spring.cloud.client.ip-address}
        ip-address: 192.168.124.17
 #consu服务健康检查 true 为启动 false 为关闭 默认为 true,建议启用
spring.cloud.consul.discovery.register-health-check=false	   
  • 启动类上添加注解

    # 这一步,非必须,引入依赖即可,这一步实质可省略
    

    image-20200816211456685

  • 启动Springboot项目

    springboot 默认使用 tomcat ,因此呢,启动项目需要依赖 springboot-start-web 依赖

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
  • consul web 控制台查看

    image-20200816215520387

    image-20200816215654011

    ​ 这是什么意思呢?

    ​ 这个其实是consul的健康检查

    - 默认情况下,consul监控健康是开启的,但是必须依赖健康监控依赖才能正确监控健康状态所以直接启动会显示错误,引入健康监控依赖之后服务正常
    

    微服务项目引入健康检查依赖

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

    consul 服务端所需核心依赖

    image-20200816220308067

    引入后,重启查看

    额,还是检测不到,这是为什么呢?

    因为啊,我consul 注册中心服务端,我是部署在了自己阿里云服务器的,项目中 是通过公网访问的, 而我自己搭建的demo (consul客户端呢,却是在本地,公网与本地通信,自然是找不到的了!)

image-20200816223745654

所以呀,以后微服务,多个服务之间,还是微服务与注册中心之间,最好是保持在同一网段,或者彼此可以互通的情况下! 当然为了安全,向暴露个网关就好了

改成本地localhost试试!

image-20200816230006077

修改后,发现监控正常! consul 服务端 与 客户端在同一ip 下,且可相互访问

image-20200816224224993

四、模拟微服务间通信

本次仅仅简单演示微服务通信,为了证明 consul 注册中心可用,其余微服务注册到注册中心会获取到注册表服务信息,服务间调用根据注册表上信息,无需写死端口Ip

  • 改造之前 consul 客户端

    (1)引入Openfeign依赖并启用

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-openfeign</artifactId>
            </dependency>
    

    image-20200823113108949

    (2)添加 web控制

    image-20200823112919800

    (3)添加 feign调用

    image-20200823113139614

  • 创建 库存微服务

    (1)创建项目引入依赖 参考上文 consul 客户端开发
    server:
      port: 9002 #端口
    spring:
      application:
        #服务名称  库存服务
        name: service-stock
      ###开始配置consul的服务注册
      cloud:
        consul:
          #consul服务器的主机地址 默认:localhost
          host: localhost
          #consul服务器的ip地址 默认:8500
          port: 8500
          discovery:
            #是否需要注册
            register: true
            #注册的实例ID (唯一标志)
            instance-id: ${spring.application.name}-1
            #服务的名称
            service-name: ${spring.application.name}
            #当前服务的请求端口
            port: ${server.port}
            #指定开启ip地址注册
            prefer-ip-address: true
            #当前服务所在 ip ${spring.cloud.client.ip-address}
            ip-address: 192.168.124.17
    
    (2)编写web 入口

    image-20200823113437058

    (3)启动库存服务,consul 控制台查看

    image-20200823113553206

  • 服务通信调用

    流程解释:前端调用 商品服务service-product|http://localhost:9001/product/buy/ping/pong 接口传入相应参数

    看是否调到了 service-stock服务

    能否拿到返回值"出库:" + pingPongType + "类型乒乓球" + num + "件,目前库存剩余:" + 66;

    image-20200823114208689

    服务间成功调用,证明 咱们的consul 服务发现注册功能是Ok的了

    我们其余微服务呢,只要注册到了consul ,就会拿到 consul services 列表表,微服务间相互调用的时候,即会从services 列表中进行查找

五、Consul 对比Eureka

由于eureka 有自我保护,当某服务挂掉(无论真假)在心跳发送接收前仍会在注册表中,并且 当相同服务做了集群后,如果集群的服务数据出现不一致时,例如订单微服务 A, B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提 供服务, 最后达到一致,,,实质就是最终一致性

但是呢 consul 讲究的是强一致性,当Leader挂掉时,重新选举期间整个consul不可用。保证了强一致性但牺牲了可用性。

综上,便是consul 的简单使用


demo 地址:springcloud-consul-demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值