Java互联网科技Java成长之路

Eureka停更了?试试Zookpper和Consul

2020-03-14  本文已影响0人  Java_老男孩

在Spring Cloud Netflix中使用Eureak作为注册中心,但是Eureka2.0停止更新,Eureka1.0 进入了维护状态。就像win7一样,同样可以用,但是官方对于新出现的问题并不能及时修复,所以我们就需要使用替代品。目前可用的注册中心替代品主要有:Zookeeper、Consul、Nacos等,这里主要讲前两个,Nacos是Spring Cloud Alilibaba中的组件,后期会说到。

使用Zookeeper作为注册中心

一、安装Zookeeper并启动服务

​ 这一步非本文重点,请自行百度,很简单的

二、将原有的微服务注册进Zookeeper

先修改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>

​ 一个小细节,为什么要排除这个依赖,然后引入一个新的依赖?这波骚操作?

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);
    }
}
使用Zookeeper作为Spring Cloud注册中心
同样的方法,修改消费者项目zookeeper-consumer-80
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);
    }

使用Consul作为注册中心

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

一、安装Consul

这个安装要比Zookeeper简单,我只说下windows安装操作,其他的查看官网https://www.consul.io/

​ 如果你下载很慢的话,我在项目代码中上传了这个安装包。看文未获取代码地址。

consul agent -dev

二、将原有微服务注册进Consul

​ 同样,我们复制两个新项目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);
    }
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
spring:
  application:
#  这个应用的名称,用来注册在注册中心的名称
    name: consul-consumer
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
#      这个就是要注册进consul中的服务名,直接使用了上边定义的微服务名
        service-name: ${spring.application.name}
#        取消Consule对当前服务的健康检查
        register-health-check: false

最后,能在Consul控制台看到这个

上边这个错误标志忽略就好了。然后我们就可以使用浏览器和之前一样进行服务的访问了

总结:

  1. 这两个注册中心在和Spring Cloud整合时,它们的理念和步骤是一样的。

    引依赖——》修改application.yml将这个微服务注册进注册中心——》在主启动类中添加注解

  2. 和Eureka不同就是,在注册中心能同时看到提供者和消费者

  3. 后期在Spring Cloud Alilibaba中,我们会使用Nacos(阿里自研的)作为注册中心

上一篇 下一篇

猜你喜欢

热点阅读