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

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(注册中心)

    Zookeeper作为注册中心搭建SpringCloud实现服务注册及发现

    spring cloud zookeeper gateway

    适用最新的spring cloud稳定版,微服务注册中心适用最新稳定版zookeeper。适用spring cloud gateway作为网关服务的demo

    尚硅谷SpringCloud第2季2020版.mmap

    Zookeeper服务注册与发现 Consul服务注册与发现 Ribbon负载均衡服务调用 OpenFeign服务接口调用 Hystrix断路器 zuul路由网关 Gateway新一代网关 SpringCloud Config 分布式配置中心 SpringCloud Bus 消息...

    SpringCloud中集成Zookeeper实现服务注册与发现示例代码

    SpringCloud中集成Zookeeper实现服务注册与发现示例代码 SpringCloud中集成Zookeeper实现服务注册与发现示例代码 SpringCloud中集成Zookeeper实现服务注册与发现示例代码 SpringCloud中集成Zookeeper实现服务注册与...

    尚硅谷SpringCloud视频(最新)

    21.尚硅谷_SpringCloud_EurekaServer服务注册中心建立 22.尚硅谷_SpringCloud_将已有的部门微服务注册进Eureka服务中心 23.尚硅谷_SpringCloud_微服务完善_主机映射名称修改 24.尚硅谷_SpringCloud_微服务完善_主机...

    springcloud集成zookeeper的方法示例

    主要介绍了springcloud集成zookeeper的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    想学习的看过来了spring4.0、springboot、springcloud详细视频课程(硅谷)

    21.硅谷学习_SpringCloud_EurekaServer服务注册中心建立 22.硅谷学习_SpringCloud_将已有的部门微服务注册进Eureka服务中心 23.硅谷学习_SpringCloud_微服务完善_主机映射名称修改 24.硅谷学习_SpringCloud_...

    Spring Boot 整合 Dubbo + Zookeeper 实现服务者与消费者的数据调用

    2.该项目提高了自己对Spring Boot整合Dubbo的理解,并深刻的认识到了服务者与消费者之间的调用及流程 4. Dubbo配置全部采用yml文件配置,方便,易读 5. 简化了开发流程,完整的Spring Boot工程 6. 适用于Dubbo初学者...

    SpringCloud微服务实践(3.54G)

    资料 1-0SpringCloud-课程介绍.avi 1-1SpringCloud-系统进化理论概述.avi 1-2SpringCloud-系统进化理论背景.avi 1-3SpringCloud-什么是微服务架构.avi ...3-5SpringCloud-搭建与配置Eureka服务注册中心.avi 3-6Spr

    springcloud2.0-zookeeper.rar

    springcloud以zookeeper作为注册中心

    SpringCloud思维导图

    6.Zookeeper服务注册与发现 7.Consul服务注册与发现 8.Ribbon负载均衡服务调用 9.OpenFeign服务接口调用 10.Hystrix断路器 11.Zuul路由网关 12.Gateway新一代网关 13.SpringCloud Config分布式配置中心 14.Spring...

    新版本SpringCloud2学习手册

    服务注册与发现 5 搭建注册中心 6 常用注册中心框架 6 注册中心环境搭建 6 注册服务提供者 8 服务消费者 11 高可用注册中心 14 Eureka高可用原理 14 Eureka集群环境搭建 14 Eureka详解 17 使用Eureka闭源...

    SpringCloud概览_终稿.docx

    Spring Cloud Zookeeper对Zookeeper的封装,使之能配合其它 Spring Cloud项目使用,一般当作注册中心。 Spring Cloud Bus分布式消息队列,是对Kafka MQ的封装,实现可靠消息。 Spring Cloud Config将配置信息中央...

    59道SpringCloud面试题详解含答案(值得珍藏)

    Spring Cloud是基于Spring Boot提供的一套微服务解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等功能。它利用Spring Boot的开发便利性,简化了分布式系统基础设施的开发,为开发...

    Java高级架构线路图学习路线内含Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、 高并发等架构技术

    Java高级架构线路图学习路线内含Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、 高并发等架构技术(nginx+redis+zookeeper+activemq+storm+dubbo+netty+jvm+并发编程锁+项目实战)点击链接加入...

    全套spring cloud 项目

    Spring Cloud是一系列框架的集合,其基于Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,构建了服务治理(发现注册)、配置中心、消息总线、负载均衡、断路器、数据监控、分布式会话和集群状态管理等...

    Spring Cloud构建微服务架构.doc

    Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单...

    springcloud酒店管理系统项目源码

    后端: springcloud全家桶 项目名: 酒店管理系统 功能点: 酒店管理,OTA直连 技术栈: 前端: react网页web框架,app 使用谷歌跨平台框架 flutter 后端: springcloud全家桶 项目名: 酒店管理系统 功能点: 酒店...

    尚硅谷Java视频教程_SpringCloud视频教程

    21.尚硅谷_SpringCloud_EurekaServer服务注册中心建立 22.尚硅谷_SpringCloud_将已有的部门微服务注册进Eureka服务中心 23.尚硅谷_SpringCloud_微服务完善_主机映射名称修改 24.尚硅谷_SpringCloud_微服务完善_...

    基于SpringCloud的秒杀项目源码.zip

    基于SpringCloud的秒杀项目,集合了zookeeper、redis、支付宝支付、nacos、RocketMQ、Seata分布式事务等技术的项目,核心业务是秒杀以及支付订单。 基于SpringCloud的秒杀项目,集合了zookeeper、redis、支付宝支付...

Global site tag (gtag.js) - Google Analytics