作者平台
| CSDN:https://blog.csdn.net/qq_41153943
| 掘金:https://juejin.cn/user/651387938290686
| 知乎:https://www.zhihu.com/people/1024-paper-96
| GitHub:https://github.com/JiangXia-1024?tab=repositories
| 微信公众号:1024笔记
本文一共2163字,预计阅读10分钟
前言
前面的文章SpringCloud系列:服务注册与发现组件-Eureka(上)介绍了常见的服务注册与发现组件有:netflix的eureka、zookeeper(关于zk可以参考之前的文章:zookeeper教程:入门篇)、consul、以及阿里的nacos。
其中SpringCloud:搭建Nacos服务以及服务发现介绍了如何使用nacos作为服务注册中心以及如何进行服务注册。文章zookeeper教程:入门篇则介绍了zookeeper的一些相关知识, zookeeper也可以作为服务注册中心,但是它没有一个服务管理页面,需要通过shell的查看服务注册,使用比较麻烦。 文章SpringCloud系列:服务注册与发现组件-Eureka(上)和 SpringCloud系列:服务注册与发现组件-Eureka(下)介绍了eureka server如何作为服务注册中心以及如何进行服务注册。但是eureka作为服务注册中心不仅需要自己开发微服务还需要使用eureka server开发服务注册中心,并且目前eureka 2.0版本已经停止孵化了。
常见的服务注册中心已经介绍的差不多了,就还差consul了,今天一起学习consul如何作为服务注册中心。
consul简介
consul是一个可以提供服务发现,健康检查,多数据中心,key/value存储等功能的分布式服务框架,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,consul的使用比较简单。consul是使用golang实现,所以具有可移植性,安装包仅仅是一个可执行文件,方便安装。也非常方便和 Docker 配合使用。
更多consul的介绍:https://www.consul.io/docs/intro
consul官网地址:https://www.consul.io/
consul下载地址:https://www.consul.io/downloads
下载安装consul
consul下载地址:https://www.consul.io/downloads。可以根据自己平台选择下载不同平台的安装包,这里就选择下载windows版本的。
下载后是一个压缩文件,解压后是一个exe文件。命令行进入到该exe文件的文件夹下(文件路径不要有中文。)或者直接该文件夹下输入cmd:
然后输入命令:
consul agent -dev # 以开发模式启动(测试使用)consul agent -service # 以服务器的模式启动(需要集群)
启动consul服务。
然后打开浏览器地址栏输入:
localhost:8500
如果不想每次都进入该目录可以将该路径配置进环境变量的path路径即可。
service表示当前注册的服务。默认consul server启动的同时注册自己,所以一开始就有一个consul服务。
nodes表示consul的集群节点。
dc1表示数据中心名称,默认是dc1(datacenter的缩写),可以通过下述命令启动时修改默认的数据中心名称:
# 启动时自定义数据中心名称consul agent -dev -client=0.0.0.0 --datacenter=jiangxia
consul下载安装并且启动完成之后就可以开发对应的微服务,然后在consul中进行服务注册了。
微服务开发以及服务注册
consul client端的开发和其他的比如nacos和eureka client的开发基本很像,主要的差别就是一些配置的区别。
同理首先在父项目工程下创建一个springboot子项目,并且引入相关的依赖,然后就是配置文件和入口类。
具体的依赖如下:
<dependencies> <!--引入springbootweb依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--引入consul依赖,用于服务注册发现--> <!--Consul Discovery--> <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></project>
除了常见的通用依赖,这里的核心依赖就是Consul Discovery的依赖用于服务注册和发现以及用于健康检查的spring-boot-starter-actuator依赖。
consul会检测所有客户端心跳,但是发送心跳时client必须给予响应该服务才能正常运行。所以需要引入健康检查的依赖,否则会导致健康检查始终不通过,导致服务不能使用,项目启动会出现下述情况:
入口类的代码如下:
@SpringBootApplication@EnableDiscoveryClient //代表这是服务注册中心的一个客户端,通用的服务注册注解 可以表示consul、zk、nacos 具体根据导入的依赖判断public class ConsulClientApplication { public static void main(String[] args) { SpringApplication.run(ConsulClientApplication.class,args); }}
这里除了@SpringBootApplication注解之外和consul相关的注解是@EnableDiscoveryClient,表示这是一个服务注册中心的客户端,用于服务注册和发现,@EnableDiscoveryClient和@EnableEurekaClient共同点都是能够让注册中心能够发现,扫描到该服务。但是和@EnableEurekaClient 注解不一样的是@EnableEurekaClient注解表示使用该注解的是一个eureka client的客户端,而@EnableDiscoveryClient是一个通用的注解,可以用于nacos、zk和consul。
接下来就是配置文件配置相应的端口和服务名称等:
#指定服务端口server.port=8082#指定服务名称spring.application.name=consulclient#向consul server 服务注册地址spring.cloud.consul.host=localhostspring.cloud.consul.port=8500spring.cloud.consul.discovery.service-name=${spring.application.name}#健康检查设置,默认是true,可以设置为false。但是同理不建议在生成环境关闭spring.cloud.consul.discovery.register-health-check=false
这里有个配置表示用于consul的健康检查,默认设置为true,上面提到的报错问题除了导入健康检查的依赖,还可以通过配置设置关闭健康检查来解决,但是和eureka一样,生产环境不建议关闭健康检查。
spring.cloud.consul.discovery.register-health-check=false
上述开发完成,启动项目,然后地址栏输入:
http://localhost:8500
可以发现刚刚开发的consul client已经注册进consul服务注册中心。
总结
通过上述过程,则使用consul作为服务注册中心并且进行服务注册和服务发现的开发完成了。 目前主流的服务注册中心有:eureka、nacos、consul、zookeeper。并且这几篇文章都分别介绍了这几款服务注册中心,总结下它们的区别和特点如下:
最后本文的源码在:https://github.com/JiangXia-1024/SpringCloudProject,欢迎下载、star。
有任何问题和不对的地方,请指出交流讨论
相关推荐
Spring注解(三):@scope设置组件作用域
SpringCloud:搭建Nacos服务以及服务发现
zookeeper教程:入门篇
SpringCloud系列:服务注册与发现组件-Eureka(上)
SpringCloud系列:服务注册与发现组件-Eureka(下)
原文:https://juejin.cn/post/7103709128995897375