vert-x3 / vertx-amqp-client

An AMQP client for Vert.x
Apache License 2.0
17 stars 18 forks source link

Errors sending messages when Azure Service Bus closes the link due to inactivity #77

Closed alexlitovsky closed 2 years ago

alexlitovsky commented 2 years ago

Version

4.2.2

Context

Quarkus 2.6.3 -> SRM AMQP 3.13.0 -> Vertx AMQP 4.2.2

My system sends messages to Azure Service Bus via Smallrye Reactive Messaging Emitter. Sending messages fails if period of inactivity > 10 mins. The error occurs in Vertx but no callback is triggered is SRM. See stacktrace below.

My guess is that ASB is closing the link due to inactivity: https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-amqp-troubleshoot#link-is-closed

Exception

2022-01-30 11:09:04,992 ERROR [io.qua.ver.cor.run.VertxCoreRecorder] (vert.x-eventloop-thread-0) Uncaught exception received by Vert.x: java.lang.IllegalStateException: send not allowed after the sender is closed.
    at org.apache.qpid.proton.engine.impl.SenderImpl.sendNoCopy(SenderImpl.java:86)
    at io.vertx.proton.impl.ProtonSenderImpl.send(ProtonSenderImpl.java:91)
    at io.vertx.proton.impl.ProtonSenderImpl.send(ProtonSenderImpl.java:56)
    at io.vertx.amqp.impl.AmqpSenderImpl.lambda$doSend$6(AmqpSenderImpl.java:183)
    at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:100)
    at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:63)
    at io.vertx.core.impl.EventLoopContext.lambda$runOnContext$0(EventLoopContext.java:38)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.base/java.lang.Thread.run(Thread.java:829)

Do you have a reproducer?

https://bitbucket.org/alexlitovsky1/vertx-amqp-emitter-bug

Steps to reproduce

  1. mvn quarkus:dev
  2. Let it run and see the error after 11 minutes
alexlitovsky commented 2 years ago

Related issue submitted to SRM: https://github.com/smallrye/smallrye-reactive-messaging/issues/1588

alexlitovsky commented 2 years ago

Closing because it's being addressed by #78