在与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)中启动。微型导航器必须更换它,但我们仍然坚持如何设置代理。
答案 0 :(得分:1)
要为所有客户端配置代理,请执行以下操作: https://docs.micronaut.io/latest/guide/configurationreference.html#io.micronaut.http.client.DefaultHttpClientConfiguration
要为手动配置的客户端配置代理,请执行以下操作: https://docs.micronaut.io/latest/guide/configurationreference.html#io.micronaut.http.client.ServiceHttpClientConfiguration
对于任何其他客户端,您可以在注释中指定配置类(包含代理设置) https://docs.micronaut.io/latest/api/io/micronaut/http/client/annotation/Client.html#configuration--
答案 1 :(得分:0)
@James,我花了几天的时间来尝试获取Service Http客户端配置,但是无论我如何尝试,都无法注入它。我试图从micronaut aws lambda guide获取增值税示例。该示例在我的公司环境中需要代理,因此我花了近两天的时间进行研究或研究,以使其能够正常工作。 我尝试了两种方法:
这是我尝试过的一些事情:
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
我终于代替了自定义配置类。对我来说,它看起来像这样,并可以用作代理服务器:
@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
}
}
的其中一个那里拿来的