Tôi đã tự hỏi nếu nó có thể cung cấp một cài đặt tùy chỉnh cho tra cứu DNS trên java.net.URL - DNS cung cấp hosting của tôi bị bong tróc vào những thời điểm nhất định trong ngày và sau đó tra cứu DNS thất bại trong một vài phút, nhưng nếu tôi tự cấu hình các lĩnh vực liên quan trong tập tin host của tôi, họ làm việc tốt, vì vậy những gì tôi muốn làm là có một số loại bộ nhớ cache DNS ở mức phần mềm, nếu tra cứu DNS thành công, cập nhật bộ nhớ cache, nếu nó không thành công, rơi trở lại đến địa chỉ IP lưu trữ và mở URLConnection trên địa chỉ IP.Cung cấp thực hiện tùy chỉnh cho tra cứu DNS trong lớp java.net.URL
Đây là thực hiện kết nối URL của tôi:
URL endpoint = new URL(null, url, new URLStreamHandler() {
@Override
protected URLConnection openConnection(URL url)
throws IOException {
URL target = new URL(url.toString());
URLConnection connection = target.openConnection();
// Connection settings
connection.setConnectTimeout(connectionTimeout);
connection.setReadTimeout(readTimeout);
return (connection);
}
});
Tôi đã nhìn vào proxy trên Oracle, nhưng không thể nhìn thấy bất cứ cách nào ngay lập tức để làm tra cứu tùy chỉnh DNS ở cấp phần mềm.
Hạn chế:
1: Nó cần phải làm việc trong Java6 (có thể Java7, nhưng khách hàng sẽ không được chuyển sang Java8 sớm)
2: Không thể thêm JVM args
3: Tôi không sở hữu các thiết bị đầu cuối này, vì vậy thay thế tên máy chủ bằng địa chỉ IP không phải là giải pháp vì cân bằng tải sẽ phân phối các nội dung/API khác nhau tùy thuộc vào việc bạn đến từ tên máy chủ hay địa chỉ IP. Như một ví dụ: mail.google.com quyết tâm 216.58.223.37, đi đến địa chỉ IP sẽ phục vụ google.com nội dung và nội dung không mail.google.com, vì cả hai dịch vụ đang ngồi đằng sau những cân bằng tải cùng sử dụng một địa chỉ IP duy nhất .
4: Tôi không biết có bao nhiêu độ phân giải DNS của URL mà tôi cần để lưu vào bộ nhớ cache, nhưng tôi biết nó sẽ không nhiều hơn 1000. Giải pháp lý tưởng sẽ là để có độ phân giải DNS trong tĩnh hashmap, nếu có độ phân giải DNS thành công, cập nhật hashmap, nếu nó không thành công, sử dụng độ phân giải DNS trong hashmap.
5: Nếu có một giải pháp java mẹ đẻ, tôi muốn rằng qua sử dụng JNI - Understanding host name resolution and DNS behavior in Java
Muốn có giải pháp thanh lịch hơn, bạn có thể thay thế phần máy chủ của URL bằng địa chỉ IP mà triển khai DNS tùy chỉnh của bạn sẽ trả về không? Sử dụng thao tác String cũ đồng bằng, ý tôi là. –
Tôi có khoảng 500 URL mà tôi sẽ cần phải duy trì, tôi đã hy vọng cho một giải pháp mà tôi chỉ có thể có một hashmap tĩnh và làm trong tra cứu bộ nhớ cho DNS 90 giây là flaky có thể một lần một ngày. –
@JanVladimirMostert bạn đã giải quyết vấn đề? mã của tôi không thể truy cập AWS đang chạy trên hackerrank. bất kỳ id làm thế nào để có được ip hoặc thay đổi dns? – Error