常见问题
已启用 logActivity
配置,但仍未有日志输出
大部分 Vert.x 的网络客户端支持 logActivity
配置,用于激活网络活动的日志。
如果启用了该配置,Netty 的 pipeline 将以 DEBUG
级别输出日志到 Netty 的日志框架。
因此仅仅启用 logActivity
配置是不够的。
您还需要在日志框架的配置中,将 io.netty.handler.logging.LoggingHandler
的日志级别设为 DEBUG
。
若 Vert.x 集群的其中一个节点宕机时,事件总线(EventBus)的消息会发生什么?
当您在事件总线上发送消息时,该消息将发送到消费者节点,消息被处理前会存储在内存中。 消息 不会 持久存储在磁盘或数据库中。
因此,如果消费者节点未处理消息就崩溃,则消息会丢失。
如果无法容忍某些消息的丢失,可以有以下几种选择:
- 发送失败并出现错误时,幂等地重试
- 异步确认(消息被消费)
否则,请考虑使用成熟的基于Broker的消息队列系统,例如 Apache ActiveMQ 和 RabbitMQ。
Vert.x 已经有这些消息队列解决方案的客户端: Vert.x AMQP Client, RabbitMQ Client for Vert.x 以及 Vert.x-Stomp。
为什么事件总线的消费者不会接收到之前发送的消息?
当您向事件总线发布一条消息,它将发送至所有注册了相应消息地址消费者的节点。 但消息 不会 持久存储在磁盘或数据库中。
因此,现有节点上新注册的消费者、或后续加入集群的节点上的消费者,将 不会 收到此前发布的消息。
如果需要此功能,请考虑使用成熟的基于Broker的消息队列系统,例如 Apache ActiveMQ 和 RabbitMQ。
Vert.x 已经有这些消息队列解决方案的客户端: Vert.x AMQP Client, RabbitMQ Client for Vert.x 以及 Vert.x-Stomp。
如何使用JVM内置的地址解析器?
默认情况下,Vert.x使用非阻塞地址解析器,而非JVM内置的地址解析器。 对于大多数用户而言这是透明的,但非阻塞解析器较不成熟,且在某些环境中可能无法使用。
在这种情况下,请在 Vert.x core 仓库 中建立 issue。
一种可行的解决方法是,关闭非阻塞解析器,并回退到JVM内置的地址解析器。
这种情况下,请在启动JVM时将 vertx.disableDnsResolver
系统属性设置为 true
:
-Dvertx.disableDnsResolver=true