मेरे पास पाइथन Kazoo लाइब्रेरी के साथ एक बहुत ही अजीब मामला है। मैं अपने नीचे दिए गए कोड में क्या कर रहा हूं -घड़ियां और क्षणिक नोड काम नहीं करता है जब ज़ूकीपर की स्थिति स्वचालित रूप से बदल जाती है?
जैसे ही मैं कज़ू लाइब्रेरी का उपयोग कर जुकीपर से कनेक्ट करता हूं, मैं एक क्षणिक नोड बनाता हूं और फिर किसी अन्य नोड पर घड़ी रखता हूं और फिर मैं हमेशा के लिए प्रोग्राम चलाता रहता हूं अनंत लूप .. मैंने जुकीपर को श्रोता भी जोड़ा है जो राज्य की निगरानी भी करेगा।
सब कुछ मेरे लिए बिल्कुल ठीक काम कर रहा है, अल्पकालिक नोड निर्भर है,
कभी कभी घड़ी मेरी znode भी ठीक काम कर रहा है पर ..., मैं क्योंकि कनेक्शन रुकावट की बहुत अजीब व्यवहार देख रहा हूँ या ड्रॉप। जैसा कि मैंने ऊपर बताया है, मैंने ज़ूकीपर को श्रोता जोड़ा है जो राज्य की निगरानी करेगा और मेरे पास एक प्रिंट स्टेटमेंट भी है .. मैं हमेशा देखता हूं, उन प्रिंट स्टेटमेंट को Lost
, Suspended
, Connected
के रूप में मुद्रित किया जा रहा है, मुझे विश्वास है कि कनेक्शन बाधाओं के कारण और उसके बाद मेरे क्षणिक नोड्स मर जाते हैं और ज़ोनोड पर मेरी घड़ी भी काम नहीं करती है।
#!/usr/bin/python
from kazoo.client import KazooClient
from kazoo.client import KazooState
from kazoo.protocol.states import EventType
def watch_host(event):
print event
def my_listener(state):
if state == KazooState.LOST:
# Register somewhere that the session was lost
print "Lost"
elif state == KazooState.SUSPENDED:
# Handle being disconnected from Zookeeper
print "Suspended"
else:
# Handle being connected/reconnected to Zookeeper
# what are we supposed to do here?
print "Being Connected/Reconnected"
zk = KazooClient(hosts='127.0.0.1:2181')
zk.start()
zk.add_listener(my_listener)
# start an ephemeral node
zk.create("/my/example/h0", b"some value", None, True)
# put a watch on my znode
children = zk.get_children("/my/example/test1", watch=watch_host)
while True:
time.sleep(5)
वहाँ किसी भी तरह से इस समस्या को दूर करने के लिए है -
नीचे मेरी कोड है जो हमेशा के लिए चलाता है? मैं चाहता हूं कि जब भी मेरा जुकीपर राज्य Lost
या Suspended
या Connected
में बदल जाता है। मैं इसे फिर से बनाकर अपना क्षणिक नोड बनाना चाहता हूं (यदि यह सही दृष्टिकोण है) और ज़ोनोड पर मेरी घड़ी भी हमेशा काम कर रही है।
क्योंकि मैं हमेशा के लिए अपना प्रोग्राम चला रहा हूं, इसलिए यदि किसी भी कारण से जुकीपर राज्य कनेक्शन बाधाओं के कारण बदलता है और यह स्वचालित रूप से फिर से कनेक्ट हो जाता है, तो मुझे यह सुनिश्चित करना होगा कि मेरा क्षणिक नोड भी ऊपर हो और मेरी घड़ियों znode भी स्वतः ही काम शुरू ..
वर्तमान में मेरे अल्पकालिक अप मर जाता है और यह भी देखता है तो राज्य स्वचालित रूप से बदल रहा है काम नहीं करता है ..
किसी भी विचार कैसे इस समस्या को दूर करने के लिए?
यह अजीब है लेकिन 'खोया' -> 'निलंबित' संक्रमण अमान्य प्रतीत होता है। क्या यह सही संक्रमण अनुक्रम है जिसे आप 'खोया' -> 'निलंबित' -> 'कनेक्ट किया गया' देखते हैं? – twil
क्या आप 'my_listener' की शाखा में क्षणिक नोड नहीं बना सकते हैं, जहां आप जानते हैं कि आप कनेक्ट हैं या फिर से कनेक्ट हैं? ऐसा लगता है जैसे आप तात्कालिक नोड * हर बार * बनाना चाहते हैं * आप केवल प्रारंभिक कनेक्शन पर कनेक्ट नहीं होते हैं, फिर से कनेक्ट होते हैं - लेकिन आपका कोड केवल बाद वाला होता है। –