2016-02-28 89 views
2

TL; DR:是否有可能克服Vertx阻止的DNS問題?最好使用Vertx HttpClient?如何解決Vertx阻止DNS問題

我正在嘗試使用Vertx來使用不同的主機刮取一些URL。我目前使用Vertx HttpClient來做到這一點,最近我遇到了阻塞DNS調用的問題,它有時會阻止我的HttpClient請求(並因此阻止事件循環)。這個問題描述爲here

我不能在「executeBlocking」函數中使用阻塞http客戶端,因爲我是爲了Vertx解決方案,因爲它是異步的,應該能夠處理我期望的負載。我也無法自己解決IP地址,因爲它只解決了特定的主機,而我試圖取回許多不同的主機

所以我的問題是:是否有任何(相對)優雅的解決方案,這個問題不需要我等待未來的Netty版本?最好是使用本地Vertx HttpClient的東西。

在此先感謝

回答

1

好了,所以挖這個問題幾天後,我發現這個問題的幾種可能的解決方案。我希望這可以幫助別人

這些都是使用executeBlock可能的解決方案

  1. 編程解決DNS問題 - 這需要第一「固定」使用vertx.executeBlocking一個有前途的處理程序,只有當DNS問題調用處理程序調用實際的HTTP客戶端代碼。此處可能進行的一些優化如下:
    • 保存DNS已解析的所有主機的內存映射,並且如果解析主機的URL到達,只是異步廢棄它。
    • 設置已下令在executeBlocking虛假陳述(如果你真的不關心排序),因爲它可以提高代碼
  2. 等待了Netty 4.1的表現出來。我不知道到底什麼時候會發生,但我顯然不能等到它
  3. 阻止事件循環無所事事。這意味着在DNS服務器開始獲取緩存命中之前,該程序會很慢。如果您可以接受一些緩慢的行爲,那可能很適合

所有這些解決方案都來自Vertx郵件列表。您可以看到完整的對應關係here(包括一些代碼示例)

目前我正在羣集中運行程序,但沒有遇到此問題。如果我以後需要解決這個問題,我可能會瞄準第一個解決方案(除非當時發佈Netty 4.1)

我希望我得到了所有的解決方案,如果有人看到這個,並有更好的想法或更正我'我會高度讚賞它

+0

注意:我們仍然有與Netty 4.1.1和4.1.5的問題。 –