How to solve Vertx blocking DNS issue(如何解决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问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何解决Vertx拦截DNS问题
基础教程推荐
- 在螺旋中写一个字符串 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01