在Spring Cloud Netflix中使用Eureak做为注册中心,可是Eureka2.0中止更新,Eureka1.0 进入了维护状态。就像win7同样,一样能够用,可是官方对于新出现的问题并不能及时修复,因此咱们就须要使用替代品。目前可用的注册中心替代品主要有:Zookeeper、Consul、Nacos等,这里主要讲前两个,Nacos是Spring Cloud Alilibaba中的组件,后期会说到。html
这一步非本文重点,请自行百度,很简单的java
zookeeper-provider-8001
和zookeeper-consumer-80
zookeeper-provider-8001
这个提供者项目<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>
一个小细节,为何要排除这个依赖,而后引入一个新的依赖?这波骚操做?spring
1. 主要是在zookeeper-discovery中的zookeeper版本是3.4.8 2. 而这个版本必定要和咱们在服务器安装的zookeeper版本一致,否则你在注册的时候,会报错。固然,若是你在服务器原本安装的是3.4.8就不用这么麻烦了。
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); } }
pom.xml(和上边同样引入zookeeper依赖)shell
appliction.ymlapache
server: port: 80 spring: cloud: zookeeper: connect-string: 192.168.25.131:2181
@SpringBootApplication @EnableDiscoveryClient public class ApplicationDemo { public static void main(String[] args) { SpringApplication.run(ApplicationDemo.class, args); } }
@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
没问题查看它的中文文档windows
Consul是使用go语言开发,是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,并且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特色是:服务发现、健康检查、键值存储、安全服务通讯、多数据中心。浏览器
这个安装要比Zookeeper简单,我只说下windows安装操做,其余的查看官网https://www.consul.io/安全
若是你下载很慢的话,我在项目代码中上传了这个安装包。看文未获取代码地址。服务器
consul agent -dev
Consul和Eureka是有图形化界面的,启动Consul后直接用浏览器打开localhost:8500
就能够看到。微信
一样,咱们复制两个新项目consul-provider-8001 和 consul-consumer-80。
并且和Zookeeeper同样,提供者和消费者都要注册进去。只贴出修改的代码,其余的参见源代码
<!--只是添加了这一个依赖,其余的依赖不变,如消费者须要的ribbon等--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency>
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); } }
@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
看一下咱们的注册中心是否有这两个微服务。而后再次进行测试。<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将这个微服务注册进注册中心——》在主启动类中添加注解
后期在Spring Cloud Alilibaba中,咱们会使用Nacos(阿里自研的)做为注册中心
请关注微信公众号,回复“SpringCloud”获取。