`
234390216
  • 浏览: 10237710 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462833
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775874
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398685
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395128
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680140
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531104
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1184867
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468616
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151475
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68318
社区版块
存档分类
最新评论

Spring Cloud(17)——使用Zookeeper进行服务注册与发现

阅读更多

使用Zookeeper进行服务注册与发现

服务注册(ServiceRegistry)与发现(DiscoveryClient)在Spring Cloud中都进行了抽象。除了之前介绍的Eureka外,Spring Cloud也支持使用Zookeeper作为服务的注册中心。基于Zookeeper的服务注册由org.springframework.cloud.zookeeper.serviceregistry.ZookeeperServiceRegistry实现,服务发现由org.springframework.cloud.zookeeper.discovery.ZookeeperDiscoveryClient实现。需要使用Zookeeper进行服务注册与发现时需要加入spring-cloud-starter-zookeeper-discovery依赖。

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

spring-cloud-starter-zookeeper-discovery默认会使用的是基于Zookeeper3.5.X系列的jar包,如果你使用的是Zookeeper3.4.X系列,则需要自己手动的指定依赖Zookeeper3.4.X系列,同时在spring-cloud-starter-zookeeper-discovery中排除对Zookeeper的依赖。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-all</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.12</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

通常作为服务提供方的应用都是Web应用,所以一般还需要加上spring-boot-starter-web依赖。Classpath中添加了spring-cloud-starter-zookeeper-discovery后Spring Cloud默认会把自己注册到地址为localhost:2181的zookeeper,服务名称默认取${spring.application.name},如果没有指定spring.application.name则默认取application。注册时会在/services/serviceId下写入实例信息,比如serviceId指定为service1,则默认会在/services/service1目录下创建一个实例对应的节点,写入实例信息。如果你需要连接的Zookeeper的地址不是localhost:2181,则可以通过spring.cloud.zookeeper.connectString进行指定。

spring:
  application:
    name: service1
  cloud:
    zookeeper:
      connect-string: 10.10.10.1:2181

无论是服务提供者还是客户端应用都需要添加spring-cloud-starter-zookeeper-discovery依赖。服务提供方应用按照上面的配置就已经可以了。客户端应用,如果你使用Feign,则需要添加spring-cloud-starter-openfeign依赖。

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

然后声明@FeignClient,定义对远程接口的抽象,比如下面这样。

@FeignClient("${feign.service1.name:service1}")
public interface HelloService {

  @GetMapping("hello")
  String hello();

}

然后在@Configuration类上声明@EnableFeignClients以启用对Feign的支持,并将扫描@FeignClient

@SpringBootApplication
@EnableFeignClients
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
}

FeignClient将通过@FeignClient上指定的serviceId到Zookeeper上寻找对应的实例,从而完成相应的调用。

对于客户端应用而言,如果它只作为客户端,而不需要对外提供服务,或者说它不需要作为一个服务注册到Zookeeper中,则我们可以指定spring.cloud.service-registry.auto-registration.enabled=false或者spring.cloud.zookeeper.discovery.register=false

spring:
  cloud:
    service-registry:
      auto-registration:
        enabled: false

如果我们的应用中拥有spring-cloud-starter-zookeeper-discovery,但是我们又不想使用基于Zookeeper的服务发现与注册功能,则可以指定spring.cloud.zookeeper.enabled=false,如果只是不想使用服务发现功能,则可以指定spring.cloud.zookeeper.discovery.enabled=false。Spring Cloud Zookeeper不允许我们只启用服务注册功能,而不启用服务发现功能。换言之,启用服务注册功能的前提是启用了服务发现功能。所以如果你的服务提供方不需要依赖其它服务,但是它需要作为一个服务注册到Zookeeper上,你不能指定spring.cloud.zookeeper.discovery.enabled=false。更多关于Spring Cloud Zookeeper可以指定的信息可以参考org.springframework.cloud.zookeeper.ZookeeperProperties的源码或API文档。

服务注册到Zookeeper中默认写入的主机地址是主机名,很多时候可能你更希望它写入的是IP地址。此时可以指定spring.cloud.zookeeper.discovery.preferIpAddress=true

spring:
  cloud:
    zookeeper:
      discovery:
        prefer-ip-address: true

服务注册到Zookeeper中的实例ID默认是当前ApplicationContext的ID,它通常可以做到唯一,但是可读性不强。可能你更希望它能够表现为当前的主机跟端口,则可以指定spring.cloud.zookeeper.discovery.instanceId为如下这样。

spring:
  cloud:
    zookeeper:
      discovery:
        instance-id: ${spring.cloud.client.hostname}:${server.port}

如果你希望instanceId是主机IP和端口的组合,则可以指定instanceId的值为${spring.cloud.client.ip-address}:${server.port}

Spring Cloud Zookeeper在进行服务注册与发现时默认的namespace,或者说根路径是/services,如果你使用的Zookeeper该路径已经有其它用途了,你可能想要更换这个根路径。可以通过spring.cloud.zookeeper.discovery.root属性来更换这个根路径,比如下面就指定了根路径是/springcloud。当更换了默认的根路径时,注意服务提供方和客户端都需要更换这个路径。

spring:
  cloud:
    zookeeper:
      discovery:
        root: /springcloud

Spring Cloud Zookeeper底层在与Zookeeper进行交互时使用的是Apache Curator,其会自动注册org.apache.curator.framework.CuratorFramework类型的bean,所以如果应用中需要自己直接与Zookeeper进行交互时可以直接注入CuratorFramework,然后通过它与Zookeeper进行交互。

 

参考文档

(注:本文是基于Spring Cloud Finchley.SR1所写)

1
0
分享到:
评论

相关推荐

    SpringCloud——Zookeeper(注册中心)

    在分布式系统中,服务注册与发现是至关重要的一个环节,SpringCloud通过集成不同的注册中心,如Eureka、Consul和Zookeeper,为微服务架构提供了强大的支持。本篇主要聚焦于SpringCloud与Zookeeper的结合,讲解如何...

    Dubbo和Spring Cloud微服务架构对比——服务注册和发现.docx

    ### Dubbo和Spring Cloud微服务架构对比——服务注册和发现 #### 微服务架构概述 在当前快速发展的软件行业中,微服务架构作为一种重要的设计模式,已经被广泛采纳。它通过将复杂的单体应用拆分为一系列相互独立的...

    [SpringCloud教程]2. 版本选型和项目搭建(csdn)————程序.pdf

    在选择大版本时,可以访问Alibaba的官方文档,查看“毕业版本依赖关系(推荐使用)”的部分,例如选择了Spring Cloud Hoxton.SR8,对应的Spring Cloud Alibaba版本为2.2.5.RELEASE,而与之匹配的Spring Boot版本为...

    基于spring-cloud系列整合的分布式项目的例子zip

    在分布式锁方面,Spring Cloud提供了分布式协调的能力,如使用Redis或Zookeeper实现锁的获取与释放。分布式事务处理,例如使用Seata,可以解决跨服务的事务一致性问题。而多数据源的支持,使得应用可以根据业务场景...

    zookeeper.rar

    《Zookeeper:初学者的春天——SpringCloud集成指南》 Zookeeper,作为分布式协调服务的明星组件,一直以来都是分布式系统中的重要角色。它为大型分布式应用提供了统一的命名服务、配置管理、集群同步等核心功能。...

    springcloud+vue实现电商系统.zip

    1. SpringCloud:作为Java领域的微服务框架,SpringCloud提供了全套的服务治理解决方案,包括服务注册与发现、配置中心、负载均衡、熔断机制等。在这个项目中,SpringCloud扮演了构建分布式系统的基石角色,使得各个...

    苏宁数据中台基于Spring Cloud微服务架构实践.pdf

    相比于Dubbo,Spring Cloud使用Http REST接口,注册中心采用了自研的Eureka,而非Dubbo中的Zookeeper,这被认为更适合服务发现。 苏宁数据中台包含多个子项目,例如Olap负责数据的加速和查询,百川是指标平台,UDMS...

    微服务架构面试专题系列:Dubbo+Spring Boot+Spring Cloud.zip

    1. **Eureka服务注册与发现**:理解Eureka Server的角色,服务注册、心跳机制、服务续约和剔除等概念。 2. **Ribbon客户端负载均衡**:使用Ribbon实现客户端的负载均衡,了解其与Dubbo的区别。 3. **Zuul和Spring ...

    SpringCloud最新2021年面试题,高级面试题及附答案解析.md

    Eureka 和 ZooKeeper 都可以用于服务注册与发现,但两者存在显著差异: 1. **CAP 理论角度**:ZooKeeper 遵循 CP(Consistency-Persistence),即在分布式系统中保证数据的一致性和持久性;而 Eureka 遵循 AP...

    从Paxos到Zookeeper分布式一致性原理与实践 + ZooKeeper-分布式过程协同技术详解 pdf

    例如,它可以作为服务注册与发现的中心,维护服务实例的状态信息,帮助客户端找到服务的最新位置。同时,ZooKeeper也是分布式锁的常见实现方式,通过创建临时节点实现锁的获取与释放。 总的来说,从Paxos到...

    注册管理(zk基本运用)

    zkspringwf项目是一个基于Spring框架和Zookeeper实现的服务注册与发现的示例。该项目展示了如何将Zookeeper集成到Spring Boot应用中,实现服务的动态注册与发现。 1. 配置Zookeeper:首先,我们需要在Spring Boot的...

    dubbo——与spring boot整合1

    在本篇内容中,我们将探讨如何将Apache Dubbo与Spring Boot进行整合,创建一个服务提供者(Provider)和一个服务消费者(Consumer)。...同时,确保Zookeeper服务正常运行,以便于服务注册和发现。

    JAVA工具factroy.rar

    Dubbo支持多种协议,如RPC、REST、Hessian等,并且可以与Zookeeper、Etcd等服务注册中心集成,实现服务的自动注册和发现。 结合这两个技术,我们可以构建出强大的微服务架构。Spring Cloud提供了全面的服务治理,而...

    Spring_2900_Registration_7

    Spring Cloud提供了集成这些服务中心的能力,使得服务注册自动化。 2. **Bean注册**:在Spring框架中,Bean代表了可被Spring管理的对象。开发者可以通过XML配置、注解配置或者Java配置类来注册Bean。例如,使用`@...

    consul_1.11.2_windows_amd64.zip

    在 Spring Cloud 体系中,几乎每个角色都会有两个以上的产品提供选择,比如在注册中心有:Eureka、Consul、zookeeper、etcd 等;网关的产品有 Zuul、Spring Cloud Gateway 等。在注册中心产品中,最常使用的是 ...

    SpringBoot Admin——监控中心

    Spring Boot Admin用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul,Zookeeper)发现。

    java面试——Dubbo面试专题.zip

    - ZooKeeper注册中心:讲解ZooKeeper如何作为Dubbo的服务注册与发现组件,理解其节点结构和服务监听机制。 - Nacos与Eureka:对比ZooKeeper,了解Nacos和Eureka在服务注册与发现上的异同。 5. **负载均衡策略** ...

    支持jdk1.8的dubbo-admin-2.5.4监控中心

    在实际使用过程中,用户应根据自身需求,结合Dubbo的其他组件,如配置中心(如Apollo或Zookeeper)、注册中心(如Eureka或Consul)、服务网关(如Spring Cloud Gateway或Zuul)等,构建完整的微服务体系,实现全方位...

    2021年最新Java后端学习路线,适用于所有想要踏入Java行业的初学者(csdn)————程序.pdf

    Dubbo作为分布式服务框架,你需要了解其架构,学会创建服务提供者和消费者,同时掌握ZooKeeper的常用命令,它是Dubbo的服务注册与发现工具。 项目实战阶段涉及多个技术,如ElementUI用于前端界面,Quartz进行定时...

Global site tag (gtag.js) - Google Analytics