常见问题

已启用 logActivity 配置,但仍未有日志输出

大部分 Vert.x 的网络客户端支持 logActivity 配置,用于激活网络活动的日志。 如果启用了该配置,Netty 的 pipeline 将以 DEBUG 级别输出日志到 Netty 的日志框架。

因此仅仅启用 logActivity 配置是不够的。 您还需要在日志框架的配置中,将 io.netty.handler.logging.LoggingHandler 的日志级别设为 DEBUG

若 Vert.x 集群的其中一个节点宕机时,事件总线(EventBus)的消息会发生什么?

当您在事件总线上发送消息时,该消息将发送到消费者节点,消息被处理前会存储在内存中。 消息 不会 持久存储在磁盘或数据库中。

因此,如果消费者节点未处理消息就崩溃,则消息会丢失。

如果无法容忍某些消息的丢失,可以有以下几种选择:

  • 发送失败并出现错误时,幂等地重试
  • 异步确认(消息被消费)

否则,请考虑使用成熟的基于Bro­ker的消息队列系统,例如 Apache Ac­tiveMQRab­bitMQ

Vert.x 已经有这些消息队列解决方案的客户端: Vert.x AMQP ClientRab­bitMQ Client for Vert.x 以及 Vert.x-​Stomp

为什么事件总线的消费者不会接收到之前发送的消息?

当您向事件总线发布一条消息,它将发送至所有注册了相应消息地址消费者的节点。 但消息 不会 持久存储在磁盘或数据库中。

因此,现有节点上新注册的消费者、或后续加入集群的节点上的消费者,将 不会 收到此前发布的消息。

如果需要此功能,请考虑使用成熟的基于Bro­ker的消息队列系统,例如 Apache Ac­tiveMQRab­bitMQ

Vert.x 已经有这些消息队列解决方案的客户端: Vert.x AMQP ClientRab­bitMQ Client for Vert.x 以及 Vert.x-​Stomp

如何使用JVM内置的地址解析器?

默认情况下,Vert.x使用非阻塞地址解析器,而非JVM内置的地址解析器。 对于大多数用户而言这是透明的,但非阻塞解析器较不成熟,且在某些环境中可能无法使用。

在这种情况下,请在 Vert.x core 仓库 中建立 issue。

一种可行的解决方法是,关闭非阻塞解析器,并回退到JVM内置的地址解析器。 这种情况下,请在启动JVM时将 vertx.disableDnsResolver 系统属性设置为 true

-Dvertx.disableDnsResolver=true