Eureka停更了?试试Zookpper和Consul
在Spring Cloud Netflix中使用Eureak作为注册中心,但是Eureka2.0停止更新,Eureka1.0 进入了维护状态。就像win7一样,同样可以用,但是官方对于新出现的问题并不能及时修复,所以我们就需要使用替代品。目前可用的注册中心替代品主要有:Zookeeper、Consul、Nacos等,这里主要讲前两个,Nacos是Spring Cloud Alilibaba中的组件,后期会说到。
使用Zookeeper作为注册中心
一、安装Zookeeper并启动服务
这一步非本文重点,请自行百度,很简单的
二、将原有的微服务注册进Zookeeper
- 使用过Dubbo的小伙伴对Zookeeper一定不陌生。使用Eureka时,我们是创建一个新的SpringBoot Web项目(如果是Eureka集群的话,就要创建多个项目),然后将其他微服务注册进去,而Zookeeper却不用新建项目,只需要通过修改配置和简单的编码就可以进行注册
- 为了和之前的项目冲突,我们先将之前的项目复制两个新的项目
zookeeper-provider-8001和zookeeper-consumer-80
先修改zookeeper-provider-8001这个提供者项目
- 在pom.xml中引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
<exclusions>
<exclusion>
<!--为什么要排除这个依赖?-->
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!--然后又引入这个依赖?-->
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.13</version>
</dependency>
一个小细节,为什么要排除这个依赖,然后引入一个新的依赖?这波骚操作?
1. 主要是在zookeeper-discovery中的zookeeper版本是3.4.8
2. 而这个版本一定要和我们在服务器安装的zookeeper版本一致,不然你在注册的时候,会报错。当然,如果你在服务器本来安装的是3.4.8就不用这么麻烦了。
- 在application.yml中配置上zookeeper的地址
server:
port: 8001
spring:
application:
# 这个应用的名称,用来注册在注册中心的名称
name: zookeeper-provider
cloud:
zookeeper:
# 如果是zookeeper集群,在这个地址后边加上就可以,用逗号分开
connect-string: 192.168.25.131:2181
- 在启动类中添加注解
@SpringBootApplication
@EnableDiscoveryClient //注意这个注解是SpringCloud包中的
public class ApplicationDemo {
public static void main(String[] args) {
SpringApplication.run(ApplicationDemo.class, args);
}
}
- 启动这个项目,然后在服务器中查看下zookeeper的节点

同样的方法,修改消费者项目zookeeper-consumer-80
pom.xml(和上边一样引入zookeeper依赖)
appliction.yml
server:
port: 80
spring:
cloud:
zookeeper:
connect-string: 192.168.25.131:2181
- 和Eureka不同的是,我们同时也要将消费者注册进Zookeeper中
@SpringBootApplication
@EnableDiscoveryClient
public class ApplicationDemo {
public static void main(String[] args) {
SpringApplication.run(ApplicationDemo.class, args);
}
}
- 我们使用的是Ribbon用服务名进行访问的方式,所以还要修改它的controller类
@GetMapping("consumer/hello/{id}")
public String hello(@PathVariable("id") String id){
//远程调用provider中的接口
return restTemplate.getForObject("http://zookeeper-provider/provider/hello/"+id,String.class);
}
- 然后启动这个项目,使用浏览器访问
http://localhost/consumer/hello/999没问题

使用Consul作为注册中心
Consul是使用go语言开发,是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。
一、安装Consul
这个安装要比Zookeeper简单,我只说下windows安装操作,其他的查看官网https://www.consul.io/
如果你下载很慢的话,我在项目代码中上传了这个安装包。看文未获取代码地址。
- 在官网上下载安装包,windows的下载解压后就是一个.exe文件。使用cmd打开当前目录(在当前目录下按住Shift+鼠标右键,选择Open commond window here 或者在地址栏中输入cmd然后回车)然后运行如下命令:
consul agent -dev
Consul和Eureka是有图形化界面的,启动Consul后直接用浏览器打开
localhost:8500就可以看到。
二、将原有微服务注册进Consul
同样,我们复制两个新项目consul-provider-8001 和 consul-consumer-80。
而且和Zookeeeper一样,提供者和消费者都要注册进去。只贴出修改的代码,其他的参见源代码
- pom.xml
<!--只是添加了这一个依赖,其他的依赖不变,如消费者需要的ribbon等-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
- application.yml(提供者和服务者除了端口号和application.name外,其他的不变)
server:
port: 8001
spring:
application:
# 这个应用的名称,用来注册在注册中心的名称
name: consul-provider
cloud:
consul:
host: localhost
port: 8500
discovery:
# 这个就是要注册进consul中的服务名,直接使用了上边定义的微服务名
service-name: ${spring.application.name}
- 在主启动类上添加注解(提供者和服务者都需要)
@SpringBootApplication
@EnableDiscoveryClient
public class ApplicationDemo {
public static void main(String[] args) {
SpringApplication.run(ApplicationDemo.class, args);
}
}
- 注意修改Controller中的远程调用服务名
@GetMapping("consumer/hello/{id}")
public String hello(@PathVariable("id") String id){
//远程调用provider中的接口
return restTemplate.getForObject("http://consul-provider/provider/hello/"+id,String.class);
}
- 然后启动这个项目,先在浏览器中输入
localhost:8500看一下我们的注册中心是否有这两个微服务。然后再次进行测试。 - 但是我们启动后,在Consul后台发现我们服务是注册进去了,但是报错了。这是因为Consul和其他的注册中心不一样,它要检查这个SpringBoot的健康值,就是要访问每个服务的"/health"接口。所以我们要在每一个微服务中引入SpringBoot的健康检查的依赖(之前用过这个的小伙伴就很熟悉了)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 这里有一个小插曲,就算当我们引入这个包后我们的
http://localhost:8001/health返回还是down,也就是说我们的健康检查还是不通过.。因为我们使用的SpringBoot和Spring Cloud版本的问题。我还没找到解决方案。但是我们可以关闭Consul对当前服务的健康检查,添加如下配置:
spring:
application:
# 这个应用的名称,用来注册在注册中心的名称
name: consul-consumer
cloud:
consul:
host: localhost
port: 8500
discovery:
# 这个就是要注册进consul中的服务名,直接使用了上边定义的微服务名
service-name: ${spring.application.name}
# 取消Consule对当前服务的健康检查
register-health-check: false
最后,能在Consul控制台看到这个

上边这个错误标志忽略就好了。然后我们就可以使用浏览器和之前一样进行服务的访问了
总结:
这两个注册中心在和Spring Cloud整合时,它们的理念和步骤是一样的。
引依赖——》修改application.yml将这个微服务注册进注册中心——》在主启动类中添加注解
和Eureka不同就是,在注册中心能同时看到提供者和消费者
后期在Spring Cloud Alilibaba中,我们会使用Nacos(阿里自研的)作为注册中心
项目代码及更多学习教程
请关注微信公众号,回复“SpringCloud”获取。

Eureka停更了?试试Zookpper和Consul的更多相关文章
- SpringCloud组件的停更和替换说明
SpringCloud的Hoxton版本,和之前的版本相比,用新的组件替换掉了原来大部分的组件,老的组件现在处于 停更不停用 的状况. 详情见下图(× 的表示之前的组件,现在停更了的:√ 的表示新的替 ...
- 博客停更及OI退役公告
停更&&OI退役 公告 高中OI之路就这样结束了,曾经想过回在NOI跪,APIO跪,HNOI跪却从未想过会在NOIP跪! 没办法自己作死啊,CCF感觉还是很良心的混个省一回来了,看以后 ...
- 博客停更转战简书http://www.jianshu.com/u/7ac4047c9cfa
博客停更转战简书 http://www.jianshu.com/u/7ac4047c9cfa
- spring4x,暂时停更
spring4x,暂时停更 鄙人愚笨,没有spring基础,直接上了spring4x,发现无法理解(另外spring4x实战课本演示不详,本人学识有限),现从spring3开始.
- 微服务架构组件梳理之Netflix停更之后该何去何从
自2018年底,Netflix陆续宣布Eureka.Hystrix等框架进入维护状态,不再进行新功能的开发. 恰逢最近我打算对公司的办公项目进行微服务架构升级,所以恶补了一番微服务相关知识,在这里进行 ...
- Simofox 2.7 - 基于 pcxFirefox 定制(停更)
••• 现已停止更新,无良作者转战 Google Chrome ••• 项目名称:Simofox (Simple + Cool + Firefox) 项目介绍:Simofox 中译名西蒙狐,目前项目版 ...
- Python_我的学习笔记 (博客停更------)
贡献一张PyCharm快捷键图(图片是借用他人的)----------建议最大化查看,因为这样不会破坏布局 注:部分内容引用小甲鱼,其他等网页,网站内容.如有冒犯,请联系我. 2019.07.21 ...
- CentOS停更;阿里发布全新操作系统(Anolis OS)
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 Linux系统对于Java程序员来说,就好比"乞丐手里的碗",任何业务都离不开他的身影,因为服务端的广泛使用,也因此衍生出了各种 ...
- 此博客停更,转至lustforlife.cn
新博客地址:lustforlife.cn
随机推荐
- 调用支付JSAPI缺少参数:sign
微信jsapi调用微信支付时报 :调用支付JSAPI缺少参数:sign 这个问题我查了很久,最后把前端的代码也拿过来看来,发现前端 sign的参数名传错了~~~~~~~前后端分离很容易出现这种问题,对 ...
- 管理Exchange Online用户介绍(一)
一.管理收件人 1.在“Office 365管理中心”主页,依次选择用户->添加用户 2.输入相关信息,其中包括名称.用户名.电子邮件地址等信息. 二.Exchange Online对用户邮箱的 ...
- django框架中的cookie与session
cookie因为http是一个无状态协议,无法记录用户上一步的操作,所以需要状态保持.cookie和session的区别:1.cookie是保存在浏览器本地的,所以相对不安全.cookie是4k的大小 ...
- cs231n spring 2017 lecture13 Generative Models
1. 非监督学习 监督学习有数据有标签,目的是学习数据和标签之间的映射关系.而无监督学习只有数据,没有标签,目的是学习数据额隐藏结构. 2. 生成模型(Generative Models) 已知训练数 ...
- SPSS|Data|Transfer|Analysis|Label|One sample test|Testval|Criables|
生物统计与实验设计-使用SPSS Data用于整合:Transfer用于预处理:Analysis用于数据的二维呈现:Label是在报表中呈现的名字: 给离散值编码: 对于离散值做数学计算: 均值比较用 ...
- Win32双缓冲画图原理
网上有许多文章讲述了如何使用Visual C++程序实现双缓冲,都是用C++面向对象语言写的,可能对很多没有接触过面向对象语言的C语言初学者来说理解起来有些困难,并且有些好心人也只是把源代码贴上去,不 ...
- 吴裕雄--python编程:CGI编程
什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户 ...
- POJ 3522 用不同的排序方式
这是一个蜜汁WA了的代码.. 说好的样例对了就是对了呢orz 反正我个人认为思路是没问题的不知道WA在哪了,丢个坑在这里以后填吧 //思路: //1节点连接的边都记录下来,依次克鲁斯卡尔枚举得出最 ...
- Eclipse快速入门:远程调试Java应用
Eclipse快速入门:远程调试Java应用 2012年03月27日00:00 it168网站原创 作者:皮丽华 编辑:皮丽华 我要评论(0) 标签: Eclipse , Java , Java框架, ...
- Linux USB 鼠标驱动程序详解(转)
Linux USB 鼠标驱动程序详解 USB 总线引出两个重要的链表!一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表.设备链表包含各种系统中的 USB 设备以 ...