本文介紹了如何解決Vertx攔截DNS問題的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
TL;DR:使用Vertx是否有可能克服攔截DNS的問題?最好使用Vertx HttpClient?
我正在嘗試使用Vertx來抓取不同主機的一些URL。我目前正在使用Vertx HttpClient來做這件事,我最近遇到了一個阻塞的DNS調用的問題,它有時會阻塞我的HttpClient請求(因此也會阻塞事件循環)。此問題的說明here。
我不能在”ecuteBlock”函數中使用阻塞http客戶端,因為我選擇了Vertx解決方案,因為它是異步的,應該能夠處理我預期的負載。此外,我無法自己解析IP地址,因為它只能在我嘗試獲取多個不同主機時解析特定主機的IP地址
所以我的問題是:這個問題有什么(相對)優雅的解決方案而不需要我等待未來的Netty版本嗎?最好使用本機Vertx HttpClient。
提前謝謝
推薦答案
好的,在對這個問題深入研究了幾天之后,我找到了這個問題的幾個可能的解決方案。我希望這能幫助一些人
這些是可能的解決方案
-
使用ecuteBlock以編程方式解決DNS問題-這需要首先使用vertx.ecuteBlock和未來的處理程序”修復”DNS問題,并且僅當處理程序被調用時才調用實際的HTTP客戶端代碼。這里的一些可能的優化可能是:
保存已解析的所有主機的內存映射,如果包含已解析主機的URL到達,則只需將其異步丟棄。
在ecuteBlocking語句中將Order設置為False(如果您真的不關心排序),因為它可以提高代碼的性能
等待Netty 4.1問世。我不知道具體什么時候會發生,但我顯然迫不及待了
不阻止事件循環。這意味著在DNS服務器開始獲得緩存命中之前,該程序將一直運行緩慢。如果你能接受一些行動遲緩,那可能是一個很好的選擇
所有這些解決方案都來自Vertx郵件列表。您可以看到完整的通信here(包括一些代碼示例)
目前我在集群中運行該程序,在上面沒有遇到這個問題。如果我以后需要解決這個問題,我可能會選擇第一個解決方案(除非那時已經發布了Netty 4.1)
我希望我所有的解決方案都是正確的,如果有人看到這一點并有更好的想法或更正,我將非常感激
這篇關于如何解決Vertx攔截DNS問題的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,