带有java sdk的通用aws客户端生成器

7nbnzgx9  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(555)

我正在做一个项目,现在我们有一个请求,给所有示例(ec2,s3,等等)一个选项,使coll成为一个代理服务器。例如,我有:

AmazonElasticLoadBalancing elbClient = AmazonElasticLoadBalancingClientBuilder.standard()       .withRegion(region.getName()).withCredentials(credentials).build();

AmazonEC2 ec2Client = AmazonEC2ClientBuilder.standard().withRegion(region).withCredentials(getCredentials()).build();

在我项目的很多地方。
在查看了awsjavasdk文档之后,我发现我需要添加 withClientConfiguration(someMethodToGetProxyConfig()) 使用前 build() .
我对java还是有点陌生,我很难创建一个足够通用的函数来为所有这些类型的客户机实现这一点。我试过:

public static AwsClientBuilder clientBuilder(AwsClientBuilder client) throws ServiceWareException {
        final String PROXY = "proxy_host_port";
        String hasProxy = Configuration.getConfigurationParameter(PROXY);
        client = client.withRegion(getRegion()).withCredentials(getCredentials());
        if (!hasProxy.isEmpty() && hasProxy != null)
            client = client.withClientConfiguration(getProxyConfig());
        return (AwsClientBuilder) client.build();

    }

但它失败了,因为我无法将amazonec2clientbuilder转换为awsclientbuilder。有人能分享一些如何做的技巧吗?或者有做类似事情的经验吗?

f1tvaqid

f1tvaqid1#

在你的最后一句话里,你在打电话 .build() ,它返回客户端而不是客户端生成器。如果你把电话转到 .build() 那么我想代码会起作用。

public static AwsClientBuilder clientBuilder(AwsClientBuilder client) throws ServiceWareException {
    final String PROXY = "proxy_host_port";
    String hasProxy = Configuration.getConfigurationParameter(PROXY);
    client = client.withRegion(getRegion()).withCredentials(getCredentials());
    if (!hasProxy.isEmpty() && hasProxy != null)
        client = client.withClientConfiguration(getProxyConfig());
    return client;
}

如果你想用这个,你需要打电话 .build 结果如何。为了更好地进行类型检查,您可能还需要向签名添加泛型类型参数(所以 .build 返回正确类型的值)。

public static <S extends AwsClientBuilder<S, T>, T> AwsClientBuilder<S, T> clientBuilder(AwsClientBuilder<S, T> client) throws ServiceWareException {
    ...
}

如果希望此方法实际构建客户机,可以调用 .build 但是它需要返回一个客户机,而不是一个客户机生成器。由于这是一种不同的行为,因此我更改了方法的名称以反映这一点。

public static <S extends AwsClientBuilder<S, T>, T> T buildClient(AwsClientBuilder<S, T> client) throws ServiceWareException {
    final String PROXY = "proxy_host_port";
    String hasProxy = Configuration.getConfigurationParameter(PROXY);
    client = client.withRegion(getRegion()).withCredentials(getCredentials());
    if (!hasProxy.isEmpty() && hasProxy != null)
        client = client.withClientConfiguration(getProxyConfig());
    return client.build();
}

相关问题