जावा में होस्टनाम का कैनोलिक नाम कैसे प्राप्त करें?

मैंने DNS हल करने के लिए एक छोटी सहायक वर्ग बनाई है:

public class DNSService {
    private static Properties env;
    private static final String CNAME_ATTRIB = "CNAME";
    private static String[] CNAME_ATTRIBS = { CNAME_ATTRIB };

    static {
        env = new Properties();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
    }

    public static String getCNAME(String host) throws NamingException {
        return getCNAME(new InitialDirContext(env), host);
    }

    private static String getCNAME(InitialDirContext idc, String host) throws NamingException {
        String cname = host;
        Attributes attrs = idc.getAttributes(host, CNAME_ATTRIBS);
        Attribute attr = attrs.get(CNAME_ATTRIB);

        if (attr != null) {
            int count = attr.size();
            if (count == 1) {
                cname = getCNAME(idc, (String) attr.get(0));
            } else {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < count; i++) {
                    sb.append("-> " + attr.get(i) + "\n");
                }

                throw new NamingException("Unexpected count while looking for CNAME of " + host + ". Expected 1. Got " + count + ".\n"
                        + sb.toString());
            }
        }

        return cname;
    }
}

इस वर्ग का प्रयोग विभिन्न धागे द्वारा किया जाता है। हालांकि, इस वर्ग द्वारा उत्पादित परिणाम दो थ्रेड कॉल के बीच थोड़ा अलग हैं।

उदाहरण के लिए, उसी दिन मुझे ये परिणाम मिलते हैं:

      <thread Name>         
02/12/2012 09:51  thread-1      www.site.com  www.site.com
02/12/2012 12:06  thread-2      www.site.com  time.microsoft.akadns.net.

मुझे time.microsoft.akadns.net। के साथ अंतिम कैनोलिक नाम क्यों मिलता है?

कभी-कभी दूसरी कॉल इस तरह के कई कैनोलिक नाम प्राप्त कर सकती है:

qq.com.edgesuite.net.
a1574.b.akamai.net.

मेरे पास दो कॉल के बीच इतना अलग परिणाम क्यों हैं? प्रत्येक कॉल पर एक सिंगल सीएनएन क्यों नहीं है?

2
यह देखने के लिए कि क्या यह गलती है, कोई अन्य DNS सर्वर का उपयोग करके जोड़ने का प्रयास करें, आप जोड़कर Google के सार्वजनिक DNS सर्वर को जोड़ सकते हैं: env.put (Context.PROVIDER_URL, "dns: //8.8.8.8"); किसी भी DNS सर्वर को याद रखें जो स्थानीय नहीं है धीमा हो सकता है।
जोड़ा लेखक Dean Taylor, स्रोत

1 उत्तर

हो सकता है कि मेजबान एक प्रकार के भार संतुलन के रूप में DNS का समाधान कर रहे हैं? उदाहरण के लिए, अमेज़ॅन से इस आधिकारिक दस्तावेज़ीकरण को देखें:

http://aws.amazon.com/en/route53/faqs/

जहां यह डब्लूआरआर और लोचदार भार संतुलन के बारे में बात करता है। हो सकता है कि आपका डेटा कुछ लोड संतुलन के साथ मिल जाए जो लोड विचारों के आधार पर विभिन्न बैकएंड के खिलाफ आपके अनुरोधों को हल करता है, और यही कारण है कि आपको अलग-अलग उत्तर मिलते हैं

1
जोड़ा