zookeeper 實現一個簡單的服務註冊與發現(C++) 二:註冊
阿新 • • 發佈:2020-07-15
git:[email protected]: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> 1011 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.\n"); 51 return -1; 52 } 53 printf("CRegister::Register create register check thread succ.\n"); 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 =======================================================\n", __func__); 108 if (EN_ZK_REGISTER_STATUS_UNREGISTER == m_status) 109 { 110 printf("CRegister::TryCheckNode status is un register. don't need check\n"); 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\n.", 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\n.", 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!\n."); 131 } 132 else 133 { 134 printf("CRegister::TryCheckNode get node succ and check succ!\n."); 135 } 136 } 137 138 int CRegister::TryRegisterNode() 139 { 140 printf("%s =======================================================\n", __func__); 141 if (EN_ZK_REGISTER_STATUS_UNREGISTER != m_status) 142 { 143 printf("CRegister::TryCheckNode status is not unregister.\n"); 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\n"); 154 return ret_code; 155 } 156 else if(ZOK != ret_code) 157 { 158 printf("CRegister::TryRegisterNode register fail. ret=%d\n", 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\n.", 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\n.", 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!\n."); 184 } 185 else 186 { 187 printf("CRegister::TryRegisterNode register fail!\n."); 188 } 189 190 return ret_code; 191 } 192 193 int CRegister::TryUnregisterNode() 194 { 195 printf("%s =======================================================\n", __func__); 196 if (EN_ZK_REGISTER_STATUS_UNREGISTER == m_status) 197 { 198 printf("CRegister::TryUnregisterNode status is un register. don't need unregister\n"); 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\n.", 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\n.", 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!\n."); 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!