繁体   English   中英

如何解决 Vertx 阻塞 DNS 问题

[英]How to solve Vertx blocking DNS issue

TL;DR:是否有可能克服 Vertx 的 DNS 阻塞问题? 最好使用 Vertx HttpClient?

我正在尝试使用 Vertx 来抓取不同主机的一些 URL。 我目前正在使用 Vertx HttpClient 来执行此操作,我最近遇到了阻塞 DNS 调用的问题,该调用有时会阻塞我的 HttpClient 请求(因此也会阻塞事件循环)。 此处描述此问题。

我无法在“executeBlocking”函数中使用阻塞 http 客户端,因为我选择了 Vertx 解决方案,因为它是异步的,应该能够处理我期望的负载。 此外,我自己无法解析 IP 地址,因为它只能在我尝试获取许多不同主机时为特定主机解析它

所以我的问题是:是否有任何(相对)优雅的解决方案来解决这个问题,不需要我等待未来的 Netty 版本? 最好是使用本机 Vertx HttpClient 的东西。

提前致谢

其他选项是通过将-Dvertx.disableDnsResolver添加到命令行来禁用dns 解析器。

好吧,在研究这个问题几天后,我找到了几个可能的解决方案。 我希望这可以帮助某人

这些是可能的解决方案

  1. 使用 executeBlock 以编程方式解决 DNS 问题 - 这需要首先使用 vertx.executeBlocking 和未来处理程序“修复”DNS 问题,并且仅当处理程序被调用以调用实际的 HTTP 客户端代码时。 这里的一些可能的优化可能是:
    • 保存 DNS 已经解析的所有主机的内存映射,如果带有解析主机的 URL 到达,则异步废弃它。
    • 在executeBlocking 语句中将ordered 设置为false(如果您真的不关心排序),因为它可以提高该代码的性能
  2. 等待 Netty 4.1 出来。 我不知道它什么时候会发生,但我显然等不及了
  3. 什么都不做阻止事件循环。 这意味着程序将缓慢直到 DNS 服务器开始获得缓存命中。 如果你能接受一些迟钝,那可能是一个很好的选择

所有这些解决方案都来自 Vertx 邮件列表。 您可以在此处查看完整的对应关系(包括一些代码示例)

目前我正在集群中运行该程序,我没有遇到这个问题。 如果我以后需要解决这个问题,我可能会瞄准第一个解决方案(除非那时 Netty 4.1 发布)

我希望我的所有解决方案都是正确的,如果有人看到这个并且有更好的想法或更正,我将不胜感激

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM