Curator教程(三)服务注册&发现(Service Discovery)

本文介绍了在微服务背景下,服务发现的重要性,并详细阐述了如何利用Curator Service Discovery进行服务注册与发现。通过服务实例注册、服务提供者与消费者的角色定义,以及具体的代码实现,展示了在Zookeeper中实现服务动态查找和变更通知的过程。
摘要由CSDN通过智能技术生成

服务发现

随着微服务的日趋火爆,系统拆分之后,各个服务模块的Provider和Consumer之间需要能够查找到对方,我们称之为服务发现。

In SOA/distributed systems, services need to find each other. i.e. a web service might need to find a caching service, etc. DNS can be used for this but it is nowhere near flexible enough for services that are constantly changing. A Service Discovery system provides a mechanism for:

  • Services to register their availability
  • Locating a single instance of a particular service
  • Notifying when the instances of a service change

Curator Service Discovery

Curator Service Discovery就是为了解决这个问题而生的,它对此抽象出了ServiceInstance、ServiceProvider、ServiceDiscovery三个接口,通过它我们可以很轻易的实现Service Discovery。

实践

假如我们需要对外提供一个服务(com.bytebeats.service.HelloService),为了保证服务的高可用行 HelloService服务部署在N台机器上,现在Consumer想要请求这个服务,如何保证HelloService可以灵活部署(随意 增加/删除 机器)?

思路

首先,HelloService Provider在启动时向Zookeeper 注册本机提供的 服务名称端口号地址;Consumer启动的时候先查询Zookeeper获取到服务Provider列表,然后通过负载均衡算法(随机、RoundRobin、一致性Hash) 选择一台机器去调用服务。


代码实现

Maven依赖

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-x-discovery</artifactId>
    <version>2.11.1</version>
</dependency>


ServerApp.java

package com.bytebeats.zookeeper.curator.discovery;

import com.bytebeats.zookeeper.curator.CuratorUtils;
import com.bytebeats.zookeeper.curator.discovery.domain.ServerPayload;
import com.bytebeats.zookeeper.util.JsonUtils;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.x.discovery.ServiceInstance;
import org.apache.curator.x.discovery.UriSpec;

import java.util.Collection;
import java.util.concurrent.TimeUnit;

/**
 * 模拟服务提供者
 *
 * @author Ricky Fung
 * @create 2016-12-08 19:24
 */
public class ServerApp {

    public static final String BASE_PATH = "services";
    public static final String SERVICE_NAME = "com.bytebeats.service.HelloService";

    public static void main(String[] args) {

        CuratorFramework client = null;
        ServiceRegistry serviceRegistry 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值