我想指定我的 Quarkus 應用程式 (v2.8.3.Final) 使用 HTTP 代理而不更改任何代碼
為了嘗試這個,我將-Dhttp.proxyHostand-Dhttp.proxyPort選項傳遞給終端,如下所示:
./mvnw quarkus:dev -Dquarkus.http.host=0.0.0.0 -Dquarkus.http.port=9000 -Ddebug=9001 -Dhttp.proxyHost=localhost -Dhttp.proxyPort=6969
- 這適用于基于 Jersey 和 Tomcat 的其他 Java 應用程式
- 這也適用于另一個 Quarkus 應用程式,(在另一點創建,但我確保 Quarkus 版本是相同的,v2.8.3.Final in
pom.xml)
比較作業的 quarkus 應用程式和有問題的應用程式
為了比較作業中的 quarkus 應用程式 ( A ) 和另一個 ( B ),我實作了一個資源,該資源將請求發送到http://google.com
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;
.
.
.
@GET
@Path("/google")
@Produces(MediaType.TEXT_PLAIN)
public String google() {
Client client = ClientBuilder.newClient();
return client.target("http://www.google.com")
.request(MediaType.TEXT_PLAIN)
.get()
.readEntity(String.class);
}
我已經確保 Quarkus 版本是相同的。這是一個最小的片段pom.xml
<properties>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
<quarkus.platform.version>2.8.3.Final</quarkus.platform.version>
</properties>
應用程式A成功地將其請求傳遞給代理服務器,而B不會。這兩個應用程式在比較它們的pom.xml檔案和application.properties檔案時非常相似。我正在努力指出相關的差異。我想至少得到一些關于我可以在哪里解決這個問題的指示。
除了傳遞-Dhttp.proxyHost和之外,我還嘗試過其他事情-Dhttp.proxyPort:
在應用程式屬性中,指定
org.jboss.resteasy.jaxrs.client.proxy.host=http://localhost,org.jboss.resteasy.jaxrs.client.proxy.port=6969- 結果:請求不通過代理
- 來源:具有代理配置的 Quarkus / Restclient
在應用程式屬性中,指定
quarkus.rest-client.proxy-address=http://localhost:6969,- 結果:請求不通過代理
- 來源:https ://quarkus.io/guides/all-config
在應用程式屬性中指定
client/mp-rest/proxyAddress=http://localhost:6969- 結果:請求不通過代理
傳遞系統屬性的其他方式
-Dhttp.proxyHost和-Dhttp.proxyPort- 例如通過設定環境變數
JAVA_TOOL_OPTIONS="-Dhttp.proxyHost -Dhttp.proxyPort" - 結果:請求不通過代理
- 例如通過設定環境變數
使用從 quarkus 生成的 Dockerfile.jvm 構建并啟動一個 docker 容器(在創建新的 quarkus 專案時包含),然后設定 env 變數
HTTP_PROXY=localhost:6969。- 它只是列印出它將
-Dhttp.proxyHostand-Dhttp.proxyPort選項傳遞給應用程式(我從一開始就做了) - 結果:請求不通過代理
- 它只是列印出它將
系統資訊
- 作業系統:Windows 11,但我在 WSL2 (Ubuntu 20.04.3 LTS) 中完成所有操作。
- CPU:英特爾酷睿 i7-10850H
uj5u.com熱心網友回復:
Quarkus 帶有兩個 REST 客戶端,舊的經典版本和新的回應式客戶端。反應式客戶端具有代理支持;經典不做廣告。嘗試切換到回應式客戶端。
(從評論復制)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/484502.html
