如何像Spring Boot方式那样为Micronaut(1.1.4)HTTP客户端配置HTTP代理?

时间:2019-07-25 10:43:13

标签: java spring-boot micronaut

在与Micronaut争执不休之后,我想到了编写一个出于相同目的而做的Spring Boot应用程序的想法。

对于Spring Boot,HTTP代理配置确实非常简单,并且有很多示例可用。我举了这个例子:

application.properties

generic.proxyHost = my.corporateproxy.net
generic.proxyPort = 3128

MyController.java

@Value("${generic.proxyHost}")
private String proxyHost;

@Value("${generic.proxyPort}")
private Integer proxyPort;

@GetMapping("/proxy")
public HttpStatus getApiWithProxy(){

    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
    InetSocketAddress address = new InetSocketAddress(proxyHost, proxyPort);
    Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
    factory.setProxy(proxy);

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setRequestFactory(factory);
    ResponseEntity<String> response = restTemplate.getForEntity("https://any.api.returningstring.net/", String.class);
    return response.getStatusCode();
}

这种方式实际上有效,我尝试将此清单转换为Micronaut,例如扩展了HttpClientConfiguration。没有成功。

是否有解决方案来设置代理并将其以编程方式传递给Micronaut中的HttpClient?

P.S:此春季启动应用程序作为Docker容器在我们的公司云(Kubernetes)中启动。微型导航器必须更换它,但我们仍然坚持如何设置代理。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

@James,我花了几天的时间来尝试获取Service Http客户端配置,但是无论我如何尝试,都无法注入它。我试图从micronaut aws lambda guide获取增值税示例。该示例在我的公司环境中需要代理,因此我花了近两天的时间进行研究或研究,以使其能够正常工作。 我尝试了两种方法:

  1. ServiceHttpClientConfiguration 失败
  2. CustomHttpClientConfiguration 成功

ServiceHttpClientConfiguration

这是我尝试过的一些事情:

resources/application.yml
...
micronaut:
    http:
        services:
            vat:
                proxy-address: some.proxy.corp.com:8000
                proxy-type: http        
example/micronaut/VatService.groovy
...
    @Client("vat")
    @Inject RxHttpClient client

我将使用调试器运行,但是client.configuration类将永远不会填充ServiceHttpClientConfiguration。它总是填充有DefaultHttpClientConfiguration

CustomHttpClientConfiguration

我终于代替了自定义配置类。对我来说,它看起来像这样,并可以用作代理服务器:

    @Inject
    @Client(value = "client-two", configuration = ClientTwoHttpConfiguration.class)
    RxHttpClient client

    @Singleton
    static class ClientTwoHttpConfiguration extends HttpClientConfiguration {

        private final DefaultHttpClientConfiguration.DefaultConnectionPoolConfiguration connectionPoolConfiguration

        @Inject
        ClientTwoHttpConfiguration(ApplicationConfiguration applicationConfiguration, DefaultHttpClientConfiguration.DefaultConnectionPoolConfiguration connectionPoolConfiguration) {
            super(applicationConfiguration)
            this.connectionPoolConfiguration = connectionPoolConfiguration
            setProxyType(Proxy.Type.HTTP)
            setProxyAddress(new InetSocketAddress("some.proxy.corp.com",8000))
        }

        @Override
        HttpClientConfiguration.ConnectionPoolConfiguration getConnectionPoolConfiguration() {
            return this.connectionPoolConfiguration
        }

    }

我从micronaut tests

的其中一个那里拿来的