zoukankan      html  css  js  c++  java
  • zookeeper 实现一个简单的服务注册与发现(C++) 二:注册

    git:git@github.com:ccx19930930/services_register_and_discovery.git

    参考链接:https://www.cnblogs.com/haippy/archive/2013/02/21/2920280.html

    base_class.h

      1 #ifndef _BASE_CLASS_H_
      2 #define _BASE_CLASS_H_
      3 
      4 #include "zk_define.h"
      5 
      6 #include <string>
      7 #include <sstream>
      8 
      9 #include <json.h>
     10 
     11 using namespace std;
     12 
     13 class CUnCopyable 
     14 {
     15 protected:
     16     CUnCopyable() {}
     17     ~CUnCopyable() {}
     18 private:
     19     CUnCopyable(const CUnCopyable&);
     20     CUnCopyable& operator=(const CUnCopyable&);
     21 };
     22 
     23 class CNodeInfo
     24 {
     25 public:
     26     CNodeInfo() { Reset(); }
     27     ~CNodeInfo() {}
     28 public:
     29     void Reset()
     30     {
     31         m_ip = "";
     32         m_port = "";
     33         m_zk_path = "";
     34         m_module_name = "";
     35         m_module_id = "";
     36         m_module_idx = "";
     37     }
     38 
     39     string ToString()
     40     {
     41         stringstream oss;
     42         oss.str("");
     43         auto set_val = [&oss](const string& key, const string& value)
     44         {
     45             oss << key << "[" << value << "] ";
     46         };
     47 
     48         set_val("IP", m_ip);
     49         set_val("PORT", m_port);
     50         set_val("ZK_PATH", m_zk_path);
     51         set_val("MODULE_NAME", m_module_name);
     52         set_val("MODULE_ID", m_module_id);
     53         set_val("MODULE_IDX", m_module_idx);
     54 
     55         return oss.str();
     56     }
     57 
     58     void FromString(const string& info)
     59     {
     60         auto get_val = [info](string key)->string
     61         {
     62             int idx;
     63             string key1 = key + "[";
     64             string key2 = "]";
     65             idx = info.find(key1) + key1.size();
     66             return info.substr(idx, info.find_first_of(key2, idx) - idx);
     67         };
     68 
     69         m_ip = get_val("IP");
     70         m_port = get_val("PORT");
     71         m_zk_path = get_val("ZK_PATH");
     72         m_module_name = get_val("MODULE_NAME");
     73         m_module_id = get_val("MODULE_ID");
     74         m_module_idx = get_val("MODULE_IDX");
     75     }
     76 
     77     void FromJson(const Json::Value& info)
     78     {
     79         m_ip = info["ip"].asString();
     80         m_port = info["port"].asString();
     81         m_zk_path = info["zk_path"].asString();
     82         m_module_name = info["module_name"].asString();
     83         m_module_id = info["module_id"].asString();
     84         m_module_idx = info["module_idx"].asString();
     85         m_reg_type = info["reg_type"].asInt();
     86     }
     87 
     88 public:
     89     string m_ip;
     90     string m_port;
     91     string m_zk_path;
     92     string m_module_name;
     93     string m_module_id;
     94     string m_module_idx;
     95 
     96 public:
     97     int m_reg_type;
     98 };
     99 
    100 #endif

    time_utils.h

     1 #ifndef _TIME_UTILS_H_
     2 #define _TIME_UTILS_H_
     3 
     4 class CTimeUtils
     5 {
     6 public:
     7     static long GetCurTimeS();
     8     static long GetCurTimeMs();
     9     static long GetCurTimeUs();
    10 
    11 
    12 };
    13 
    14 #endif

    time_utils.cpp

     1 #include "time_utils.h"
     2 
     3 #include <sys/time.h>
     4 
     5 long CTimeUtils::GetCurTimeS()
     6 {
     7     struct timeval  tv;
     8     struct timezone tz;
     9 
    10     tz.tz_minuteswest = 0;
    11     tz.tz_dsttime = 0;
    12     gettimeofday(&tv, &tz);
    13     return  tv.tv_sec;
    14 }
    15 
    16 long CTimeUtils::GetCurTimeMs()
    17 {
    18     return GetCurTimeUs() / 1000;
    19 }
    20 
    21 long CTimeUtils::GetCurTimeUs()
    22 {
    23     struct timeval  tv;
    24     struct timezone tz;
    25     long cur_time_us = 0;
    26 
    27     tz.tz_minuteswest = 0;
    28     tz.tz_dsttime = 0;
    29     gettimeofday(&tv, &tz);
    30     cur_time_us = tv.tv_sec * 1000000 + tv.tv_usec;
    31     return cur_time_us;
    32 }

    zk_define.h

     1 #ifndef _ZK_DEFINE_H_ 
     2 #define _ZK_DEFINE_H_
     3 
     4 const int kMaxBufferLen = 4096;
     5 const int kZkHandleIntervalTime = 1000000;
     6 const int kZkRegisterIntervalTime = 1000000;
     7 const int kZkDiscoveryIntervalTime = 1000000;
     8 
     9 enum EZkRegisterStatus
    10 {
    11     EN_ZK_REGISTER_STATUS_UNREGISTER = 0,
    12     EN_ZK_REGISTER_STATUS_REGISTER,
    13     EN_ZK_REGISTER_STATUS_TIMEOUT,
    14     EN_ZK_REGISTER_STATUS_UNKNOWN,
    15 };
    16 
    17 enum EZkRegisterType
    18 {
    19     EN_ZK_REGISTER_TYPE_NORMAL,
    20     EN_ZK_REGISTER_TYPE_LOCK,
    21 };
    22 
    23 #endif

    register.h

     1 #ifndef _REGISTER_H_ 
     2 #define _REGISTER_H_
     3 
     4 #include "base_class.h"
     5 
     6 #include <zookeeper.jute.h>
     7 
     8 class CRegister : public CUnCopyable
     9 {
    10 private:
    11     static pthread_mutex_t m_mutex;
    12     static CRegister* m_pins;
    13     CRegister();
    14 public:
    15     static CRegister* GetInstance();
    16     int Init(const CNodeInfo & node_info);
    17     
    18 public:
    19     int Register();
    20     int UnRegister();
    21 
    22 private:
    23     static void* RegisterCheckThread(void * param);
    24     int RegisterCheck();
    25     bool IsRunning();
    26 
    27 private:
    28     int TryCheckNode();
    29     int TryRegisterNode();
    30     int TryUnregisterNode();
    31 
    32 private:
    33     pthread_t m_reg_check_thread_id;
    34     bool m_is_running;
    35     CNodeInfo m_self_info;
    36     struct Stat m_self_stat;
    37     EZkRegisterStatus m_status;
    38     long m_last_check_time;
    39 
    40 private:
    41     string m_raw_zk_path;
    42 };
    43 
    44 #endif

    register.cpp

      1 #include "register.h"
      2 #include "auto_lock.h"
      3 #include "zk_handle.h"
      4 #include "time_utils.h"
      5 
      6 #include <stdio.h>
      7 
      8 #include <sys/prctl.h>
      9 #include <unistd.h>
     10 #include <pthread.h>
     11 
     12 CRegister* CRegister::m_pins = nullptr;
     13 pthread_mutex_t CRegister::m_mutex;
     14 
     15 CRegister::CRegister() 
     16     : m_is_running(false)
     17     , m_reg_check_thread_id(0)
     18     , m_status(EN_ZK_REGISTER_STATUS_UNREGISTER)
     19     , m_last_check_time(0)
     20 {
     21 
     22 }
     23 
     24 CRegister* CRegister::GetInstance()
     25 {
     26     if (m_pins == nullptr)
     27     {
     28         CAutoMutexLock auto_lock(m_mutex);
     29         if (m_pins == nullptr)
     30         {
     31             m_pins = new CRegister;
     32         }
     33     }
     34     return m_pins;
     35 }
     36 
     37 int CRegister::Init(const CNodeInfo& node_info)
     38 {
     39     m_self_info = node_info;
     40     return 0;
     41 }
     42 
     43 int CRegister::Register()
     44 {
     45     if (0 == m_reg_check_thread_id)
     46     {
     47         m_is_running = true;
     48         if (0 != pthread_create(&m_reg_check_thread_id, nullptr, CRegister::RegisterCheckThread, nullptr))
     49         {
     50             printf("CRegister::Register create register check thread fail.
    ");
     51             return -1;
     52         }
     53         printf("CRegister::Register create register check thread succ.
    ");
     54     }
     55     return 0;
     56 }
     57 
     58 int CRegister::UnRegister()
     59 {
     60     m_is_running = false;
     61     CAutoMutexLock auto_lock(m_mutex);
     62     TryUnregisterNode();
     63 }
     64 
     65 void* CRegister::RegisterCheckThread(void* param)
     66 {
     67     prctl(PR_SET_NAME, "zk_register_check");
     68     while (true == CRegister::GetInstance()->IsRunning())
     69     {
     70         CRegister::GetInstance()->RegisterCheck();
     71         usleep(kZkRegisterIntervalTime);
     72     }
     73     return nullptr;
     74 }
     75 
     76 int CRegister::RegisterCheck()
     77 {
     78     CAutoMutexLock auto_lock(m_mutex);
     79 
     80     //未注册,尝试注册
     81     if (EN_ZK_REGISTER_STATUS_UNREGISTER == m_status)
     82     {
     83         TryRegisterNode();
     84     }
     85 
     86     //已注册,check连接
     87     else if (EN_ZK_REGISTER_STATUS_REGISTER == m_status)
     88     {
     89         TryCheckNode();
     90     }
     91 
     92     //状态未知,check连接
     93     else if (EN_ZK_REGISTER_STATUS_UNKNOWN == m_status)
     94     {
     95         TryCheckNode();
     96     }
     97     return 0;
     98 }
     99 
    100 bool CRegister::IsRunning()
    101 {
    102     return m_is_running;
    103 }
    104 
    105 int CRegister::TryCheckNode()
    106 {
    107     printf("%s =======================================================
    ", __func__);
    108     if (EN_ZK_REGISTER_STATUS_UNREGISTER == m_status)
    109     {
    110         printf("CRegister::TryCheckNode status is un register. don't need check
    ");
    111         return 0;
    112     }
    113 
    114     struct Stat stat;
    115     string info;
    116     int ret_code = CZkHandle::GetInstance()->ZkGetNodeInfo(m_raw_zk_path, info, stat);
    117     if (ZNONODE == ret_code)
    118     {
    119         printf("CRegister::TryCheckNode node don't exists. raw_path=%s
    .", m_raw_zk_path.c_str());
    120         m_status = EN_ZK_REGISTER_STATUS_UNREGISTER;
    121     }
    122     else if (ZOK != ret_code)
    123     {
    124         printf("CRegister::TryCheckNode something wrong. raw_path=%s ret_code=%d
    .", m_raw_zk_path.c_str(), ret_code);
    125         m_status = EN_ZK_REGISTER_STATUS_UNKNOWN;
    126     }
    127     else if (m_self_info.ToString() != info)
    128     {
    129         m_status = EN_ZK_REGISTER_STATUS_UNREGISTER;
    130         printf("CRegister::TryCheckNode get node succ.but belong to others!
    .");
    131     }
    132     else
    133     {
    134         printf("CRegister::TryCheckNode get node succ and check succ!
    .");
    135     }
    136 }
    137 
    138 int CRegister::TryRegisterNode()
    139 {
    140     printf("%s =======================================================
    ", __func__);
    141     if (EN_ZK_REGISTER_STATUS_UNREGISTER != m_status)
    142     {
    143         printf("CRegister::TryCheckNode status is not unregister.
    ");
    144         return 0;
    145     }
    146 
    147     string reg_zk_path = m_self_info.m_zk_path + "/" + m_self_info.m_module_name + "_" + m_self_info.m_module_idx;
    148     string raw_node_name;
    149     bool is_sequential = m_self_info.m_reg_type == EN_ZK_REGISTER_TYPE_NORMAL;
    150     int ret_code = CZkHandle::GetInstance()->ZkCreateNode(reg_zk_path, m_self_info.ToString(), is_sequential, raw_node_name);
    151     if (ZNODEEXISTS == ret_code)
    152     {
    153         printf("CRegister::TryRegisterNode register fail. someone has already register
    ");
    154         return ret_code;
    155     }
    156     else if(ZOK != ret_code)
    157     {
    158         printf("CRegister::TryRegisterNode register fail. ret=%d
    ", ret_code);
    159         return ret_code;
    160     }
    161 
    162     m_raw_zk_path = raw_node_name;
    163 
    164     struct Stat stat;
    165     string info;
    166     ret_code = CZkHandle::GetInstance()->ZkGetNodeInfo(m_raw_zk_path, info, stat);
    167     if (ZNONODE == ret_code)
    168     {
    169         printf("CRegister::TryRegisterNode node don't exists. raw_path=%s
    .", m_raw_zk_path.c_str());
    170         return ret_code;
    171     }
    172     else if (ZOK != ret_code)
    173     {
    174         printf("CRegister::TryRegisterNode something wrong. raw_path=%s ret_code=%d
    .", m_raw_zk_path.c_str(), ret_code);
    175         return ret_code;
    176     }
    177 
    178     if (m_self_info.ToString() == info)
    179     {
    180         m_self_stat = stat;
    181         m_status = EN_ZK_REGISTER_STATUS_REGISTER;
    182         m_last_check_time = CTimeUtils::GetCurTimeUs();
    183         printf("CRegister::TryRegisterNode register succ!
    .");
    184     }
    185     else
    186     {
    187         printf("CRegister::TryRegisterNode register fail!
    .");
    188     }
    189 
    190     return ret_code;
    191 }
    192 
    193 int CRegister::TryUnregisterNode()
    194 {
    195     printf("%s =======================================================
    ", __func__);
    196     if (EN_ZK_REGISTER_STATUS_UNREGISTER == m_status)
    197     {
    198         printf("CRegister::TryUnregisterNode status is un register. don't need unregister
    ");
    199         return 0;
    200     }
    201 
    202     struct Stat stat;
    203     string info;
    204     int ret_code = CZkHandle::GetInstance()->ZkGetNodeInfo(m_raw_zk_path, info, stat);
    205     if (ZNONODE == ret_code)
    206     {
    207         printf("CRegister::TryUnregisterNode node don't exists. raw_path=%s
    .", m_raw_zk_path.c_str());
    208         m_status = EN_ZK_REGISTER_STATUS_UNREGISTER;
    209         return 0;
    210     }
    211     else if (ZOK != ret_code)
    212     {
    213         printf("CRegister::TryUnregisterNode something wrong. raw_path=%s ret_code=%d
    .", m_raw_zk_path.c_str(), ret_code);
    214         m_status = EN_ZK_REGISTER_STATUS_UNKNOWN;
    215         return 0;
    216     }
    217     else if (m_self_info.ToString() != info)
    218     {
    219         m_status = EN_ZK_REGISTER_STATUS_UNREGISTER;
    220         printf("CRegister::TryUnregisterNode get node succ.but belong to others!
    .");
    221         return 0;
    222     }
    223 
    224     ret_code = CZkHandle::GetInstance()->ZkDeleteNode(m_raw_zk_path);
    225 
    226     if (ZOK != ret_code && ZNONODE != ret_code)
    227     {
    228         printf("CRegister::TryUnregisterNode unregister fail");
    229     }
    230     else
    231     {
    232         printf("CRegister::TryUnregisterNode unregister succ");
    233         m_status = EN_ZK_REGISTER_STATUS_UNREGISTER;
    234     }
    235 
    236     return ret_code;
    237 }
    View Code

    register_test main.cpp

     1 #include "../zk_util/zk_handle.h"
     2 #include "../zk_util/register.h"
     3 
     4 #include <json.h>
     5 #include <unistd.h>
     6 
     7 #include <fstream>
     8 #include <iostream>
     9 
    10 //伪分布式部署 host list最好以配置文件形式,此处为测试程序,暂时写死
    11 const char* host_list = "xx.xx.xx.xx:port,xx.xx.xx.xx:port,xx.xx.xx.xx:port";
    12 const int time_out = 3000;
    13 int main(int argc, char* argv[])
    14 {
    15     if (argc != 2)
    16     {
    17         std::cout << "./" << argv[0] << " <conf.json>" << std::endl;
    18         return -1;
    19     }
    20 
    21     CZkHandle::GetInstance()->ZkInit(host_list, time_out);
    22     CNodeInfo node_info;
    23 
    24     std::ifstream ifs; 
    25     ifs.open(argv[1]);
    26     if (!ifs.good())
    27     {
    28         return -1;
    29     }
    30 
    31     Json::Value jsn_conf;
    32     Json::Reader jsn_reader;
    33     if (jsn_reader.parse(ifs, jsn_conf) == false)
    34     {
    35         return -2;
    36     }
    37 
    38     node_info.FromJson(jsn_conf);
    39 
    40     CRegister::GetInstance()->Init(node_info);
    41     CRegister::GetInstance()->Register();
    42 
    43     sleep(60);
    44 
    45     return 0;
    46 }

    Makefile

     1 INC_DIR:= ./ ../zk_util/ /usr/local/include/zookeeper/ /usr/local/include/json/
     2 SRCS:= $(wildcard ./*cpp ../zk_util/*cpp)
     3 OBJS:= $(patsubst %.cpp, %.o, $(SRCS))
     4 LIBS:= -lpthread -lzookeeper_mt -ljsoncpp
     5 
     6 CXX:= g++
     7 
     8 CXXFLAGS:= -w -g -std=c++11 $(addprefix -I, $(INC_DIR)) $(LIBS) -Wl,-rpath="/usr/local/lib"
     9 
    10 EXE:= ../../bin/register_test
    11 
    12 $(EXE):$(OBJS)
    13     $(CXX) -o $(EXE) $(OBJS) $(CXXFLAGS)
    14 
    15 clean:
    16     rm -rf $(EXE)
    17     rm -rf $(OBJS)

    register_test_1.conf 

    1 {
    2         "ip":"127.0.0.1",
    3         "port":"12345",
    4         "zk_path":"/zk_test1",
    5         "module_name":"register_test",
    6         "module_id":"1",
    7         "module_idx":"1",
    8         "reg_type":1
    9 }

    register_test_2.conf

    1 {
    2         "ip":"127.0.0.1",
    3         "port":"12345",
    4         "zk_path":"/zk_test2",
    5         "module_name":"register_test",
    6         "module_id":"2",
    7         "module_idx":"2",
    8         "reg_type":0
    9 }

    加锁注册测试:使用register_test_1.conf 启动多个测试程序

    第一个:

    ccx@ccx:~/self_test/zookeeper/services_register_and_discovery/bin$ ll
    total 2228
    drwxrwxrwx 1 ccx ccx     512 May 30 18:35 ./
    drwxrwxrwx 1 ccx ccx     512 May 30 18:20 ../
    -rwxrwxrwx 1 ccx ccx 1187296 May 30 18:35 register_test*
    -rwxrwxrwx 1 ccx ccx 1092352 May 30 18:24 zk_handle_test*
    ccx@ccx:~/self_test/zookeeper/services_register_and_discovery/bin$ ./register_test ../conf/register_test_1.conf 
    CZkHandle::ZkInit create register check thread succ.
    CRegister::Register create register check thread succ.
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkCreateNode create node fail. ret=-8
    CRegister::TryRegisterNode register fail. ret=-8
    CZkHandle::ResetZkHandle: connect to zk succ.
    CZkHandle::ZkInitWatchar: [type=-1] [state=3] [path=] [watcher_ctx=(nil)]
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkCreateNode create node succ! path=/zk_test1/register_test_1
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test1/register_test_1] [czxid=17179873759] [mzxid=17179873759] [version=0] [cversion=0] [child_num=0]
    CRegister::TryRegisterNode register succ!
    .CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    TryCheckNode =======================================================
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test1/register_test_1] [czxid=17179873759] [mzxid=17179873759] [version=0] [cversion=0] [child_num=0]
    CRegister::TryCheckNode get node succ and check succ!
    .TryCheckNode =======================================================
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test1/register_test_1] [czxid=17179873759] [mzxid=17179873759] [version=0] [cversion=0] [child_num=0]
    CRegister::TryCheckNode get node succ and check succ!

    第二个:

    ccx@ccx:~/self_test/zookeeper/services_register_and_discovery/bin$ ./register_test ../conf/register_test_1.conf 
    CZkHandle::ZkInit create register check thread succ.
    CRegister::Register create register check thread succ.
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkCreateNode create node fail. ret=-8
    CRegister::TryRegisterNode register fail. ret=-8
    CZkHandle::ResetZkHandle: connect to zk succ.
    CZkHandle::ZkInitWatchar: [type=-1] [state=3] [path=] [watcher_ctx=(nil)]
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkCreateNode create node fail. ret=-110
    CRegister::TryRegisterNode register fail. someone has already register
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkCreateNode create node fail. ret=-110
    CRegister::TryRegisterNode register fail. someone has already register
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkCreateNode create node fail. ret=-110
    CRegister::TryRegisterNode register fail. someone has already register

    第一个stop之后的第二个:

    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkCreateNode create node fail. ret=-110
    CRegister::TryRegisterNode register fail. someone has already register
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkCreateNode create node fail. ret=-110
    CRegister::TryRegisterNode register fail. someone has already register
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkCreateNode create node fail. ret=-110
    CRegister::TryRegisterNode register fail. someone has already register
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test1/register_test_1] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] ]
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkCreateNode create node succ! path=/zk_test1/register_test_1
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test1/register_test_1] [czxid=17179873781] [mzxid=17179873781] [version=0] [cversion=0] [child_num=0]
    CRegister::TryRegisterNode register succ!
    .TryCheckNode =======================================================
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test1/register_test_1] [czxid=17179873781] [mzxid=17179873781] [version=0] [cversion=0] [child_num=0]
    CRegister::TryCheckNode get node succ and check succ!
    .TryCheckNode =======================================================
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test1/register_test_1 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test1] MODULE_NAME[register_test] MODULE_ID[1] MODULE_IDX[1] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test1/register_test_1] [czxid=17179873781] [mzxid=17179873781] [version=0] [cversion=0] [child_num=0]
    CRegister::TryCheckNode get node succ and check succ!

    普通注册测试:使用register_test_2.conf 启动多个测试程序

    第一个:

    ccx@ccx:~/self_test/zookeeper/services_register_and_discovery/bin$ ll
    total 2228
    drwxrwxrwx 1 ccx ccx     512 May 30 18:35 ./
    drwxrwxrwx 1 ccx ccx     512 May 30 18:20 ../
    -rwxrwxrwx 1 ccx ccx 1187296 May 30 18:35 register_test*
    -rwxrwxrwx 1 ccx ccx 1092352 May 30 18:24 zk_handle_test*
    ccx@ccx:~/self_test/zookeeper/services_register_and_discovery/bin$ ./register_test ../conf/register_test_2.conf 
    CZkHandle::ZkInit create register check thread succ.
    CRegister::Register create register check thread succ.
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test2/register_test_2] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2] ]
    CZkHandle::ZkCreateNode create node fail. ret=-8
    CRegister::TryRegisterNode register fail. ret=-8
    CZkHandle::ResetZkHandle: connect to zk succ.
    CZkHandle::ZkInitWatchar: [type=-1] [state=3] [path=] [watcher_ctx=(nil)]
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test2/register_test_2] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2] ]
    CZkHandle::ZkCreateNode create node succ! path=/zk_test2/register_test_20000000008
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000008
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000008 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test2/register_test_20000000008] [czxid=17179873784] [mzxid=17179873784] [version=0] [cversion=0] [child_num=0]
    CRegister::TryRegisterNode register succ!
    .TryCheckNode =======================================================
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000008
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000008 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test2/register_test_20000000008] [czxid=17179873784] [mzxid=17179873784] [version=0] [cversion=0] [child_num=0]
    CRegister::TryCheckNode get node succ and check succ!

    第二个:

    ccx@ccx:~/self_test/zookeeper/services_register_and_discovery/bin$ ll
    total 2228
    drwxrwxrwx 1 ccx ccx     512 May 30 18:35 ./
    drwxrwxrwx 1 ccx ccx     512 May 30 18:20 ../
    -rwxrwxrwx 1 ccx ccx 1187296 May 30 18:35 register_test*
    -rwxrwxrwx 1 ccx ccx 1092352 May 30 18:24 zk_handle_test*
    ccx@ccx:~/self_test/zookeeper/services_register_and_discovery/bin$ ./register_test ../conf/register_test_2.conf 
    CZkHandle::ZkInit create register check thread succ.
    CRegister::Register create register check thread succ.
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test2/register_test_2] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2] ]
    CZkHandle::ZkCreateNode create node fail. ret=-8
    CRegister::TryRegisterNode register fail. ret=-8
    CZkHandle::ResetZkHandle: connect to zk succ.
    CZkHandle::ZkInitWatchar: [type=-1] [state=3] [path=] [watcher_ctx=(nil)]
    TryRegisterNode =======================================================
    CZkHandle::ZkCreateNode create node [path=/zk_test2/register_test_2] [value=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2] ]
    CZkHandle::ZkCreateNode create node succ! path=/zk_test2/register_test_20000000009
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000009
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000009 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test2/register_test_20000000009] [czxid=17179873786] [mzxid=17179873786] [version=0] [cversion=0] [child_num=0]
    CRegister::TryRegisterNode register succ!
    .TryCheckNode =======================================================
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000009
    CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000009 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test2/register_test_20000000009] [czxid=17179873786] [mzxid=17179873786] [version=0] [cversion=0] [child_num=0]
    CRegister::TryCheckNode get node succ and check succ!
    .CZkHandle::ZkExists: [ret=0]
    CZkHandle::ZkExists: [path=/] [czxid=0] [mzxid=0] [version=0] [cversion=291] [child_num=5]
    TryCheckNode =======================================================
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000009
    CZkHandle::ZkGetNodeInfo get node info for path=/zk_test2/register_test_20000000009 succ. buffer=IP[127.0.0.1] PORT[12345] ZK_PATH[/zk_test2] MODULE_NAME[register_test] MODULE_ID[2] MODULE_IDX[2] 
    CZkHandle::ZkGetNodeInfo: [path=/zk_test2/register_test_20000000009] [czxid=17179873786] [mzxid=17179873786] [version=0] [cversion=0] [child_num=0]
    CRegister::TryCheckNode get node succ and check succ!
  • 相关阅读:
    GTD180007:【运维】LINUX学习
    GTD180006:【运维】安装调试GDB
    {done}GTD180005:【翻译】LISP prehistory
    ComPiler180001:【学习】编译器学习链接
    AIIE180002:AIIE2015大会主题
    AIIE180001:AIIE2016大会主题
    GTD180004:【开发】python_med
    GTD180003:【开发】python_oeis
    欧亚大帝国及一战、二战
    大洲分界线
  • 原文地址:https://www.cnblogs.com/chinxi/p/12994240.html
Copyright © 2011-2022 走看看