Java 来自带有 AMQPBridge 的 Vertx 的运行时警告
Java runtime warning from Vertx with AMQPBridge
我正在使用以下 Java 片段和用于 AQMP 1.0 的 Vertx IO:
this.vertx = Vertx.vertx();
AmqpBridge bridge = AmqpBridge.create(this.vertx);
// Start the bridge, then use the event loop thread to process things
// thereafter.
bridge.start(hostname, port,
username, password, res -> {
// Set up a consumer using the bridge, register a handler for it.
MessageConsumer<String> consumer = bridge
.createConsumer(this.processorConfiguration.getQueueName());
// Add the message handler.
consumer.handler(vertxMsg -> {
String payload = vertxMsg.body();
logger.debug("Rx: " + payload);
});
consumer.exceptionHandler(error -> {
logger.error("Error - " + error.getMessage());
});
});
}
当我 运行 这段代码时,我得到:
2019-08-27 10:28:27,071 WARN (Slf4JLogger.java:151) - 触发了 exceptionCaught() 事件,它到达了管道的尾部。这通常意味着管道中的最后一个处理程序没有处理异常。
io.netty.channel.ChannelPipelineException: io.vertx.core.net.impl.VertxHandler.handlerAdded() 抛出异常;删除。
在 io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:616)
在 io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:226)
在 io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:192)
在 io.vertx.core.net.impl.NetClientImpl.connected(NetClientImpl.java:233)
在 io.vertx.core.net.impl.NetClientImpl.lambda$doConnect$3(NetClientImpl.java:188)
在 io.vertx.core.net.impl.ChannelProvider.lambda$connect$1(ChannelProvider.java:78)
在 io.vertx.core.net.impl.ChannelProvider.connected(ChannelProvider.java:154)
在 io.vertx.core.net.impl.ChannelProvider.lambda$handleConnect$2(ChannelProvider.java:137)
在 io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:514)
在 io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:507)
在 io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:486)
在 io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:427)
在 io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:111)
在 io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:82)
在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:300)
在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:335)
在 io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:588)
在 io.netty.channel.nio.NioEventLoop.processSelectedKeys 优化(NioEventLoop.java:512)
在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:426)
在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:398)
在 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:877)
在 java.lang.Thread.run(Thread.java:748)
原因:java.lang.IllegalAccessError:试图从 class io.vertx.core.net.impl.ConnectionBase 访问 class io.netty.channel.VoidChannelPromise
在 io.vertx.core.net.impl.ConnectionBase.(ConnectionBase.java:72)
在 io.vertx.core.net.impl.NetSocketImpl.(NetSocketImpl.java:84)
在 io.vertx.core.net.impl.NetClientImpl.lambda$connected$4(NetClientImpl.java:219)
在 io.vertx.core.net.impl.VertxHandler.handlerAdded(VertxHandler.java:102)
在 io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:597)
... 还有 21 个
这只是一个警告,但这是我需要解决的问题吗?我似乎无法找出未处理的异常是什么。我目前无法让我的应用程序接收任何消息,所以我正在尝试确定这是否相关,或者(更有可能)我在做其他愚蠢的错误。
我想我在使用 AmqpClient 而不是使用时收到了相同的警告:
https://vertx.io/docs/vertx-amqp-client/java/
谢谢
发帖后我突然灵机一动,检查了我使用的 POM 文件。依赖项之一是使用旧版本的 Netty,这导致了此警告。我升级了依赖项,它使用了新版本的 Netty,警告消失了,我现在可以接收消息了。干杯!
我正在使用以下 Java 片段和用于 AQMP 1.0 的 Vertx IO:
this.vertx = Vertx.vertx();
AmqpBridge bridge = AmqpBridge.create(this.vertx);
// Start the bridge, then use the event loop thread to process things
// thereafter.
bridge.start(hostname, port,
username, password, res -> {
// Set up a consumer using the bridge, register a handler for it.
MessageConsumer<String> consumer = bridge
.createConsumer(this.processorConfiguration.getQueueName());
// Add the message handler.
consumer.handler(vertxMsg -> {
String payload = vertxMsg.body();
logger.debug("Rx: " + payload);
});
consumer.exceptionHandler(error -> {
logger.error("Error - " + error.getMessage());
});
});
}
当我 运行 这段代码时,我得到:
2019-08-27 10:28:27,071 WARN (Slf4JLogger.java:151) - 触发了 exceptionCaught() 事件,它到达了管道的尾部。这通常意味着管道中的最后一个处理程序没有处理异常。 io.netty.channel.ChannelPipelineException: io.vertx.core.net.impl.VertxHandler.handlerAdded() 抛出异常;删除。 在 io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:616) 在 io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:226) 在 io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:192) 在 io.vertx.core.net.impl.NetClientImpl.connected(NetClientImpl.java:233) 在 io.vertx.core.net.impl.NetClientImpl.lambda$doConnect$3(NetClientImpl.java:188) 在 io.vertx.core.net.impl.ChannelProvider.lambda$connect$1(ChannelProvider.java:78) 在 io.vertx.core.net.impl.ChannelProvider.connected(ChannelProvider.java:154) 在 io.vertx.core.net.impl.ChannelProvider.lambda$handleConnect$2(ChannelProvider.java:137) 在 io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:514) 在 io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:507) 在 io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:486) 在 io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:427) 在 io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:111) 在 io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:82) 在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:300) 在 io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:335) 在 io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:588) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeys 优化(NioEventLoop.java:512) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:426) 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:398) 在 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:877) 在 java.lang.Thread.run(Thread.java:748) 原因:java.lang.IllegalAccessError:试图从 class io.vertx.core.net.impl.ConnectionBase 访问 class io.netty.channel.VoidChannelPromise 在 io.vertx.core.net.impl.ConnectionBase.(ConnectionBase.java:72) 在 io.vertx.core.net.impl.NetSocketImpl.(NetSocketImpl.java:84) 在 io.vertx.core.net.impl.NetClientImpl.lambda$connected$4(NetClientImpl.java:219) 在 io.vertx.core.net.impl.VertxHandler.handlerAdded(VertxHandler.java:102) 在 io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:597) ... 还有 21 个
这只是一个警告,但这是我需要解决的问题吗?我似乎无法找出未处理的异常是什么。我目前无法让我的应用程序接收任何消息,所以我正在尝试确定这是否相关,或者(更有可能)我在做其他愚蠢的错误。
我想我在使用 AmqpClient 而不是使用时收到了相同的警告:
https://vertx.io/docs/vertx-amqp-client/java/
谢谢
发帖后我突然灵机一动,检查了我使用的 POM 文件。依赖项之一是使用旧版本的 Netty,这导致了此警告。我升级了依赖项,它使用了新版本的 Netty,警告消失了,我现在可以接收消息了。干杯!