diff --git a/dubbo_client/__init__.py b/dubbo_client/__init__.py
index 7feb134..0d2608a 100644
--- a/dubbo_client/__init__.py
+++ b/dubbo_client/__init__.py
@@ -3,4 +3,9 @@
 from rpc import (
     DubboClient,
 )
-from rpcerror import *
\ No newline at end of file
+from rpcerror import *
+
+from registry import (
+    Registry,
+    ZookeeperRegistry,
+)
\ No newline at end of file
diff --git a/dubbo_client/common.py b/dubbo_client/common.py
index ff103ba..2b49e6c 100644
--- a/dubbo_client/common.py
+++ b/dubbo_client/common.py
@@ -25,5 +25,5 @@
             pos = key.find('.')
             if pos > -1:
                 key = key[pos + 1:]
-            print key
+            # print key
             self.__dict__[key] = value
\ No newline at end of file
diff --git a/dubbo_client/registry.py b/dubbo_client/registry.py
index 025782a..d64be6e 100644
--- a/dubbo_client/registry.py
+++ b/dubbo_client/registry.py
@@ -1,6 +1,4 @@
 # coding=utf-8
-import Queue
-from threading import Thread
 import urllib
 
 from kazoo.protocol.states import KazooState
@@ -10,96 +8,105 @@
 
 __author__ = 'caozupeng'
 from kazoo.client import KazooClient
-import logging
-
-logging.basicConfig()
-zk = KazooClient(hosts='172.19.65.33:2181', read_only=True)
-"""
-所有注册过的服务端将在这里
-格式为{providername:{ip+port:service}}
-providername = group_version_servicename
-"""
-service_provides = {}
 
 
-def state_listener(state):
-    if state == KazooState.LOST:
-        # Register somewhere that the session was lost
-        print 'session lost'
-    elif state == KazooState.SUSPENDED:
-        # Handle being disconnected from Zookeeper
-        print 'disconnect from zookeeper'
-    else:
-        # Handle being connected/reconnected to Zookeeper
-        print 'connected'
+class Registry(object):
+    def add_provider_listener(self, provide_name):
+        """
+        监听注册中心的服务上下线
+        :param provide_name: 类似com.ofpay.demo.api.UserProvider这样的服务名
+        :return: 无返回
+        """
+        pass
+
+    def get_provides(self, provide_name, default=None):
+        """
+        获取已经注册的服务URL对象
+        :param provide_name: com.ofpay.demo.api.UserProvider
+        :param default:
+        :return: 返回一个dict的服务集合
+        """
+        pass
 
 
-zk.add_listener(state_listener)
+class ZookeeperRegistry(Registry):
+    """
+    所有注册过的服务端将在这里
+    格式为{providername:{ip+port:service}}
+    providername = group_version_servicename
+    """
+    __service_provides = {}
+    __connect_state = 'UNCONNECT'
 
+    def __init__(self, hosts):
+        self.__zk = KazooClient(hosts=hosts, read_only=True)
+        self.__zk.add_listener(self.__state_listener)
+        self.__zk.start()
 
-def node_listener(event):
-    # print event
-    event_queue.put(event)
+    def __state_listener(self, state):
+        if state == KazooState.LOST:
+            # Register somewhere that the session was lost
+            self.__connect_state = state
+        elif state == KazooState.SUSPENDED:
+            # Handle being disconnected from Zookeeper
+            print 'disconnect from zookeeper'
+            self.__connect_state = state
+        else:
+            # Handle being connected/reconnected to Zookeeper
+            print 'connected'
+            self.__connect_state = state
 
+    def __event_listener(self, event):
+        self.__do_event(event)
 
-def handler_urls(urls):
-    for child_node in urls:
-        url = urllib.unquote(child_node).decode('utf8')
-        if url.startswith('jsonrpc'):
-            provide = ServiceProvider(url)
-            service_key = service_provides.get(provide.interface)
-            if service_key:
-                service_key[provide.location] = provide
-            else:
-                service_provides[provide.interface] = {provide.location: provide}
+    def __handler_urls(self, urls):
+        for child_node in urls:
+            url = urllib.unquote(child_node).decode('utf8')
+            if url.startswith('jsonrpc'):
+                provide = ServiceProvider(url)
+                service_key = self.__service_provides.get(provide.interface)
+                if service_key:
+                    service_key[provide.location] = provide
+                else:
+                    self.__service_provides[provide.interface] = {provide.location: provide}
 
+    def __do_event(self, event):
+        # event.path 是类似/dubbo/com.ofpay.demo.api.UserProvider/providers 这样的
+        # 如果要删除，必须先把/dubbo/和最后的/providers去掉
+        provide_name = event.path[7:event.path.rfind('/')]
+        if provide_name in self.__service_provides:
+            del self.__service_provides[provide_name]
+        if event.state == 'CONNECTED':
+            children = self.__zk.get_children(event.path, watch=self.__event_listener)
+            self.__handler_urls(children)
+        if event.state == 'DELETED':
+            children = self.__zk.get_children(event.path, watch=self.__event_listener)
+            self.__handler_urls(children)
 
-def add_provider_listener(provide_name):
-    #如果已经存在，首先删除原有的服务的集合
-    if provide_name in service_provides:
-        del service_provides[provide_name]
-    children = zk.get_children('{0}/{1}/{2}'.format('dubbo', provide_name, 'providers'), watch=node_listener)
-    #全部重新添加
-    handler_urls(children)
+    def add_provider_listener(self, provide_name):
+        """
+        监听注册中心的服务上下线
+        :param provide_name: 类似com.ofpay.demo.api.UserProvider这样的服务名
+        :return: 无返回
+        """
+        # 如果已经存在，首先删除原有的服务的集合
+        if provide_name in self.__service_provides:
+            del self.__service_provides[provide_name]
+        children = self.__zk.get_children('{0}/{1}/{2}'.format('dubbo', provide_name, 'providers'),
+                                          watch=self.__event_listener)
+        # 全部重新添加
+        self.__handler_urls(children)
 
+    def get_provides(self, provide_name, default=None):
+        """
+        获取已经注册的服务URL对象
+        :param provide_name: com.ofpay.demo.api.UserProvider
+        :param default:
+        :return: 返回一个dict的服务集合
+        """
+        return self.__service_provides.get(provide_name, default)
 
-num_worker_threads = 2
-
-
-def worker():
-    while True:
-        event = event_queue.get()
-        do_event(event)
-        event_queue.task_done()
-
-
-event_queue = Queue.Queue()
-
-
-def do_event(event):
-    # event.path 是类似/dubbo/com.ofpay.demo.api.UserProvider/providers 这样的
-    # 如果要删除，必须先把/dubbo/和最后的/providers去掉
-    provide_name = event.path[7:event.path.rfind('/')]
-    if provide_name in service_provides:
-        del service_provides[provide_name]
-    if event.state == 'CONNECTED':
-        children = zk.get_children(event.path, watch=node_listener)
-        handler_urls(children)
-    if event.state == 'DELETED':
-        children = zk.get_children(event.path, watch=node_listener)
-        handler_urls(children)
-
-for i in range(num_worker_threads):
-    t = Thread(target=worker)
-    t.daemon = True
-    t.start()
-
-
-zk.start()
-event_queue.join()
 
 if __name__ == '__main__':
-    zk.start()
-    if zk.exists("/dubbo"):
-        add_provider_listener('com.ofpay.demo.api.UserProvider')
+    pass
 
diff --git a/dubbo_client/rpc.py b/dubbo_client/rpc.py
index 6bbd3ba..888d985 100644
--- a/dubbo_client/rpc.py
+++ b/dubbo_client/rpc.py
@@ -1,30 +1,15 @@
-import httplib
-import json
 import random
 from urllib2 import HTTPError
+
 from pyjsonrpc import HttpClient, JsonRpcError
 
-from dubbo_client.registry import service_provides, add_provider_listener
+
 from dubbo_client.rpcerror import NoProvider, ConnectionFail, dubbo_client_errors
 
 
 __author__ = 'caozupeng'
 
 
-def raw_client(service_interface, app_params):
-    headers = {"Content-type": "application/json-rpc",
-               "Accept": "text/json"}
-    provides = service_provides.get(service_interface, ())
-    if len(provides) > 0:
-        location, first = provides.items().pop()
-        h1 = httplib.HTTPConnection(first.ip, port=int(first.port))
-        h1.request("POST", first.path, json.dumps(app_params), headers)
-        response = h1.getresponse()
-        return response.read(), None
-    else:
-        return None, 'can not find the provide of {0}'.format(service_interface)
-
-
 class DubboClient(object):
     interface = ''
 
@@ -37,12 +22,13 @@
         def __call__(self, *args, **kwargs):
             return self.client_instance.call(self.method, *args, **kwargs)
 
-    def __init__(self, interface):
+    def __init__(self, interface, registry):
         self.interface = interface
-        add_provider_listener(interface)
+        self.registry = registry
+        self.registry.add_provider_listener(interface)
 
     def call(self, method, *args, **kwargs):
-        provides = service_provides.get(self.interface, {})
+        provides = self.registry.get_provides(self.interface, {})
         if len(provides) == 0:
             raise NoProvider('can not find provide', self.interface)
         location, provide = random.choice(provides.items())
@@ -70,14 +56,4 @@
 
 
 if __name__ == '__main__':
-    app_params = {
-        "jsonrpc": "2.0",
-        "method": "getUser",
-        "params": ["A001"],
-        "id": 1
-    }
-    service_interface = 'com.ofpay.demo.api.UserProvider'
-    add_provider_listener(service_interface)
-    ret, error = raw_client(service_interface, app_params)
-    if not error:
-        print json.loads(ret, encoding='utf-8')
\ No newline at end of file
+    pass
\ No newline at end of file
diff --git a/test_dubbo_client/test_registry.py b/test_dubbo_client/test_registry.py
index b07546a..8cef5b2 100644
--- a/test_dubbo_client/test_registry.py
+++ b/test_dubbo_client/test_registry.py
@@ -1,11 +1,8 @@
-from dubbo_client.registry import zk
+from dubbo_client import ZookeeperRegistry
 
 __author__ = 'caozupeng'
 
 if __name__ == '__main__':
-    if zk.exists("/dubbo"):
-        # Print the version of a node and its data
-        children = zk.get_children("/dubbo")
-        print "There are {0} children".format(len(children))
-        for node in children:
-            print node
\ No newline at end of file
+    registry = ZookeeperRegistry('172.19.65.33:2181')
+    registry.add_provider_listener('com.ofpay.demo.api.UserProvider')
+    print registry.get_provides('com.ofpay.demo.api.UserProvider')
\ No newline at end of file
diff --git a/test_dubbo_client/test_rpclib.py b/test_dubbo_client/test_rpclib.py
index 2346359..553dce9 100644
--- a/test_dubbo_client/test_rpclib.py
+++ b/test_dubbo_client/test_rpclib.py
@@ -2,13 +2,15 @@
 import time
 
 from dubbo_client import DubboClient, DubboClientError
+from dubbo_client import ZookeeperRegistry
 
 
 __author__ = 'caozupeng'
 
 if __name__ == '__main__':
     service_interface = 'com.ofpay.demo.api.UserProvider'
-    dubbo_client = DubboClient(service_interface)
+    registry = ZookeeperRegistry('172.19.65.33:2181')
+    dubbo_client = DubboClient(service_interface, registry)
     for i in range(1000):
         try:
             print dubbo_client.getUser('A003')
