wechatpay-apiv3/wechatpay-java

自定义hostname

Closed this issue · 1 comments

您的功能请求与问题有关吗? 请描述您遇到的问题

当前HostName类只有
API("api.mch.weixin.qq.com"),
APIHK("apihk.mch.weixin.qq.com");
这2个枚举,我们项目中想使用灾备,需要用api2.mch.weixin.qq.com

描述您想要的解决方案

希望能自定义HostName

您还有其他的方案吗?

No response

其他信息

No response

灾备是在主域名不可访问时使用的,可以自定义 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 之后,请结合服务容量和用户体验评估连接超时时间,避免服务挂死或者无效等待。