[英]How can I configure the HTTP proxy for a Micronaut (1.1.4) HTTP client like the Spring Boot way?
Well after struggling a lot with Micronaut to dompted our proxies, I came to the idea to write a Spring Boot Application doing for the same purpose.好吧,在与 Micronaut 苦苦挣扎以放弃我们的代理之后,我萌生了编写一个用于相同目的的 Spring Boot 应用程序的想法。
For Spring Boot the HTTP proxy configuration is really straight forward and there are a lot examples available.对于 Spring Boot,HTTP 代理配置非常简单,并且有很多示例可用。 I came out with this example:我提出了这个例子:
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();
}
This way actually works, I tried to translate this listing to Micronaut extending for example the HttpClientConfiguration.这种方式确实有效,我尝试将此列表转换为 Micronaut 扩展,例如 HttpClientConfiguration。 Without any success.没有任何成功。
Is there any solution to set proxy and passing it programmatically to the HttpClient in Micronaut?是否有任何解决方案可以设置代理并将其以编程方式传递给 Micronaut 中的 HttpClient?
PS: This spring boot application is launched as Docker Container in our corporate Cloud (Kubernetes). PS:这个 Spring Boot 应用程序在我们的企业云 (Kubernetes) 中作为 Docker 容器启动。 The micronaut have to replace it, but we stuck at how to set the proxies. micronaut 必须更换它,但我们坚持如何设置代理。
To configure the proxy for all clients: 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.DefaultHttpClientConfiguration
To configure a proxy for a manually configured client: https://docs.micronaut.io/latest/guide/configurationreference.html#io.micronaut.http.client.ServiceHttpClientConfiguration为手动配置的客户端配置代理: https : //docs.micronaut.io/latest/guide/configurationreference.html#io.micronaut.http.client.ServiceHttpClientConfiguration
For any other clients you can specify the configuration class (which contains the proxy settings) in the annotation https://docs.micronaut.io/latest/api/io/micronaut/http/client/annotation/Client.html#configuration--对于任何其他客户端,您可以在注释中指定配置类(包含代理设置) https://docs.micronaut.io/latest/api/io/micronaut/http/client/annotation/Client.html#configuration- ——
@James, I spent a couple days trying to get a Service Http Client Configuration but no matter what I tried, I couldn't get it to inject. @James,我花了几天时间尝试获取服务 Http 客户端配置,但无论我尝试什么,都无法注入。 I tried to get the VAT example working from the micronaut aws lambda guide .我试图从micronaut aws lambda 指南中获取增值税示例。 That example needs a proxy in my corporate environment, so I spent nearly two days, give or take, researching to get it to work.这个例子在我的公司环境中需要一个代理,所以我花了将近两天的时间,给予或接受,研究让它工作。 I tried 2 ways:我尝试了两种方法:
Here are some things I tried:以下是我尝试过的一些事情:
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
I would run with the debugger but the client.configuration class would never get populated with the ServiceHttpClientConfiguration.我会使用调试器运行,但 client.configuration 类永远不会填充 ServiceHttpClientConfiguration。 It always got populated with the DefaultHttpClientConfiguration它总是填充有 DefaultHttpClientConfiguration
I finally went for a custom configuration class instead.我最终改为使用自定义配置类。 It looks like this for me and works for a proxy:对我来说看起来像这样并且适用于代理:
@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
}
}
I took this from one of the micronaut tests我从其中一项micronaut 测试中获取了这个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.