簡體   English   中英

奇怪的未知主機異常

[英]Odd unknown host exception

我的服務器遇到一些奇怪的異常。 服務器正在調用后端服務,並且在“正常”操作期間可以正常運行,但是,如果該服務在短時間內出現故障,則我的服務器將完全關閉。 后端服務重新啟動后,我的所有http調用都收到未知的主機異常。 如果我重新啟動服務器,它可以再次運行,但是我什至首先遇到錯誤似乎很奇怪。

我撥打電話的示例:

        Client client = ClientBuilder.newClient();

        response = client.target(uri)
                .request(MediaType.APPLICATION_JSON_TYPE)
                .header("XApiKey", catalogApiKey)
                .get();

並且stacktrace是相當標准的:

java.net.UnknownHostException.
      at java.net.InetAddress.getAllByName0(InetAddress.java:1280)
      at java.net.InetAddress.getAllByName(InetAddress.java:1192)
      at java.net.InetAddress.getAllByName(InetAddress.java:1126)
      at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
      at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:259)
      at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:159)
      at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)
      at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
      at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
      at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:882)
      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
      at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
      at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:283)
      at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:436)
      at org.jboss.resteasy.client.jaxrs.internal.ClientInvocationBuilder.get(ClientInvocationBuilder.java:159)

如果相關,我正在Wildfly服務器上運行。

什么會導致這種行為?

如果您查看InetAddress的來源(例如, http : UnknownHostException ), UnknownHostException到處都是UnknownHostException實例化時,使用host字符串或明顯非空的字符串作為構造函數參數進行實例化。

但是,stacktrace中的異常似乎有一個空message 因此,我推斷代碼正在對一個空字符串的主機名進行查找。

發生此問題時,我將添加一些代碼以打印uri的值。 我懷疑這在某種程度上是虛假的。

Java緩存DNS條目。 默認值為“永久”,如$JAVA_HOME/jre/lib/security/java.security中條目networkaddress.cache.ttl下的定義。

我鼓勵您考慮將“正數”緩存減少到少量,大概10秒左右。 您可以修改java.security文件或使用類似以下的代碼:

java.security.Security.setProperty("networkaddress.cache.ttl", "10");

在您的代碼中。 還有一個“負”緩存,用於緩存失敗的條目。 在您的環境中,可能需要對正負緩存進行一些試驗才能找到正確的設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM