मेरे पास एक क्लाइंट है जो एक जीआरपीसी सेवा ए को कॉल करता है जो दूसरी जीआरपीसी सेवा बी को कॉल करता है। मैं ServerInterceptor एक रूट स्पैन के तहत संपूर्ण कॉल ट्रेस को कैप्चर करने के लिए कार्यान्वयन (स्तर 1) क्लाइंट और सेवा A से शुरू होकर उसके चाइल्ड स्पैन (स्तर 2) के रूप में ) और सेवा बी अगले स्तर के बच्चे की अवधि के रूप में (स्तर 3 पर) इस तरह:

Client Span
   |
   |__ Server A Span
              |
              |__ Server B Span

मैं इस उद्देश्य के लिए क्लाइंट और सर्वर इंटरसेप्टर का उपयोग करना चाहता हूं क्योंकि मैं पूरे उत्पाद कोड को स्पष्ट रूप से स्थापित किए बिना सभी विधि कॉल का पता लगा सकता हूं। इसलिए, मुझे प्रत्येक बच्चे को कॉल करते समय पेरेंट स्पैन के साथ स्पैन संदर्भ को इंजेक्ट करने की आवश्यकता होगी ताकि चाइल्ड लेवल पर इंटरसेप्टर इसे निकाल सके और अपना स्पैन बनाते समय इसे पैरेंट स्पैन के रूप में उपयोग कर सके।

चूंकि मुझे सर्वर पर सभी इंटरसेप्टर घोषित करने और पास करने की आवश्यकता है, जैसा कि दिखाया गया है यहां, ये इंटरसेप्टर एक दूसरे से इंटरैक्ट नहीं करते हैं। ऐसे मामले में, मैं हर स्तर पर अवधि संदर्भ को गतिशील रूप से कैसे इंजेक्ट करूं? क्या किसी अन्य कॉल को इंटरसेप्ट करते समय सर्वरइंटरसेप्टर को प्रारंभ सेवा में जोड़ने का कोई तरीका है?

दूसरे शब्दों में, मैं अलग-अलग सर्वर ट्रेसिंग इंटरसेप्टर का उपयोग करके खोजी गई सेवाओं में स्पैन संदर्भों का प्रचार कैसे करूं?

यहां बताया गया है कि मैं इंटरसेप्टर कैसे जोड़ रहा हूं:

server = ServerBuilder.forPort(port)
.addService(ServerInterceptors.intercept(service, someInterceptor,
    someOtherInterceptor, serverTracingInterceptor))
.build()
.start();

मैं इनके समान सर्वर और क्लाइंट ट्रेसिंग इंटरसेप्टर बनाने की कोशिश कर रहा हूं: ServerTracingInterceptor.java, ClientTracingInterceptor.java

यदि यह संभव नहीं है, तो क्या आप कृपया वैकल्पिक तरीकों का सुझाव दे सकते हैं?

धन्यवाद!

0
prgrmmr 9 जिंदा 2019, 12:28

1 उत्तर

सबसे बढ़िया उत्तर

यह निश्चित रूप से एक बग है। कृपया जावा-जीआरपीसी ओपनट्रेसिंग के खिलाफ एक मुद्दा जमा करें

1
smalafeev 11 जिंदा 2019, 07:52