使用ZooKeeper实现数据发布/订阅。

本文介绍了使用ZooKeeper实现发布/订阅模式,通过创建ZooKeeper节点存储数据库配置信息,利用Watcher监听机制,确保多个服务器能动态获取最新配置,实现配置信息的集中管理和动态更新。
摘要由CSDN通过智能技术生成


发布/订阅模式简述。

这是属于一种设计模式,在此不做过多的介绍,只是给出大概的概念。

发布订阅模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。

订阅/发布模式也分为两种,分别是推模式和拉模式。

在推模式中,服务器主动将数据更新发送给所有订阅的客户端。
在拉模式中,由客户端主动发起请求来获取最新数据,客户端可以采用定时轮询的形式。

假如有多个服务器都需要连接同一个数据库,我们可以让这多个数据库读取同一个配置文件,这样如果想要更换数据库的话只需要更改配置文件,然后让服务器使用新的配置信息重新连接就好。

在这种情况下就可以使用发布/订阅模式,让多个服务器共同订阅一个目标,然后当目标将最新的配置文件发布的时候,所有的订阅者都能够收到最新的消息,进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。


使用ZooKeeper实现。

还是假设有多个服务器需要同时更换数据库,可以使用发布/订阅模式来完成,使用ZooKeeper来实现。最终做到只需要简单的更改一个配置文件,从而让多个服务器都能够拿到最新的信息。

其实这也是利用了ZooKeeper的Watcher监听来完成的,先在ZooKeeper中创建一个节点,然后将数据库的配置信息放在这个节点中,让其它的服务器监听这个节点的数据变化,当该节点的内容发生变化时就重新读取。监听的方法使用Curator提供的缓存策略就可以,三种缓存策略的介绍可以看看本人之前的写的文章Curator的三种缓存。

工程目录:

这里写图片描述

  • DBConfig:这是一个配置信息类,其中有了数据库的url、driver、username、password字段。
  • dbconfig.properties:这是一个配置信息文件,存放了数据库的连接信息。
  • PublishServer:发布数据用的类,读取本地的dbconfig.properties文件,然后将其内容存放到ZooKeeper中。
  • SubscribeServer:订阅数据用来的类,从ZooKeeper中获取数据库的连接信息,如果ZooKeeper中没有的话就从本地文件dbconfig.properties中读取。
  • ZKConstants:存放一些连接ZooKeeper的常量。

看两个比较重要的类:PublishServer 和

PublishServer .java

package com.leafage.zk;

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Output;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.CreateMode;

import java.io.*;
import java.util.Properties;

/**
 * 使用ZooKeeper发布消息
 * @Author Leafage
 * @Date 2017/12/10 17:45
 **/

public class PublishServer {
   

    private static DBConfig dbConfig;
    private static CuratorFramework client;
    public static void main(String[] args) {
        init();
        readConfig();
        publishInfo();
    }


    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值