मुझे जेवीएम और डीएनएस के साथ समस्या का सामना करना पड़ रहा है।जेवीएम और ओएस डीएनएस कैशिंग
सब कुछ मैं (the docs और this सहित) पढ़ रहा हूँ कहना है कि मैं networkaddress.cache.ttl
, जो java.security.Security.setProperties
का उपयोग कर सेट किया जा सकता का उपयोग कर JVM DNS कैशिंग निष्क्रिय कर सकते हैं, लेकिन सिस्टम गुण का उपयोग करने का मानक दृष्टिकोण के माध्यम से। मैंने सफलतापूर्वक 0 को बदल दिया है, इसलिए मेरे जेवीएम में कैशिंग नहीं है।
लेकिन अब, InetAddress.getByName("mytest.com")
की प्रत्येक कॉल पर, यह है कि मेरे JVM प्रणाली DNS कैश (मेरे मामले Windows 8 में) उपयोग कर रहा है लगता है। दरअसल, विधि के 2 कॉल के बीच, मैंने "mytest.com" के लिए BIND9 गुणों को बदल दिया है, लेकिन आईपी रिटर्न अभी भी वही है। मेरी जावा कोड में
setCachePolicyInJVM(0)
: यहाँ कार्यप्रवाह है।mytest.com
से 1 9 2.168.1 सेट करें। BIND9 में , पुनरारंभ करें।InetAddress.getByName("mytest.com").getHostAddress();
-> 1 9 2.168.1।- सेट
mytest.com
-> 1 9 2.168.1। BIND9 में , पुनरारंभ करें। InetAddress.getByName("mytest.com").getHostAddress();
-> 1 9 2.168.1। (होना चाहिए यदि कोई कैशिंग नहीं था)।- फ्लश विंडोज डीएनएस
InetAddress.getByName("mytest.com").getHostAddress();
-> 192.168.1।
मैं कई बार पढ़ा है कि JVM सिस्टम कैश का उपयोग नहीं करता है, लेकिन यह गलत है: यह स्पष्ट रूप से नहीं करता है।
हम कैसे प्रत्येक कॉल पर एक नया DNS संकल्प मजबूर करते हैं, ओएस DNS कैश को दरकिनार?
यह मेरे लिए भी उपयोगी होगा: मैं एक विफलता परिदृश्य के दौरान लोड बैलेंसर के दूसरी तरफ सभी आईपी पते का उपयोग करने के प्रयास में जेवीएम डीएनएस कैशिंग को अक्षम करने का प्रयास कर रहा हूं। चूंकि हम एक विफलता परिदृश्य में हैं, इसलिए मैं समय से पहले नए आईपी पते नहीं जान सकता, और यह भी स्पष्ट नहीं है कि नए आईपी पते ऑनलाइन कब आएंगे। तो मुझे हर बार होने के लिए वास्तव में DNS लुकअप की आवश्यकता होती है। –