自定义hostname
Closed this issue · 1 comments
hifishzlj commented
您的功能请求与问题有关吗? 请描述您遇到的问题
当前HostName类只有
API("api.mch.weixin.qq.com"),
APIHK("apihk.mch.weixin.qq.com");
这2个枚举,我们项目中想使用灾备,需要用api2.mch.weixin.qq.com
描述您想要的解决方案
希望能自定义HostName
您还有其他的方案吗?
No response
其他信息
No response
xy-peng commented
灾备是在主域名不可访问时使用的,可以自定义 DNS,把 api2
的解析列表放在 api
的解析列表之后。
public class OkHttpDns implements Dns {
@Override
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
if (hostname.equals("api.mch.weixin.qq.com")) {
return Dns.SYSTEM.lookup(hostname).append(Dns.SYSTEM.lookup("api2.mch.weixin.qq.com"));
}
return Dns.SYSTEM.lookup(hostname);
}
}
你可以在构造的时候使用自定义DNS:
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.dns(new OkHttpDns())
.build();
HttpClient httpClient =
new DefaultHttpClientBuilder()
.config(config)
.okHttpClient(okHttpClient)
.build();
DNS 解析出多个 IP 地址,OkHttp 会按照顺序依次连接,直到连接成功为止。所以增加灾备域名的 IP 之后,请结合服务容量和用户体验评估连接超时时间,避免服务挂死或者无效等待。