STOMP connection not closed after emitting ERROR frame #2410
-
As per the STOMP spec, a broker must always close the connection after sending an ERROR frame to a client. However, when using the STOMP and Web STOMP plugins, RabbitMQ sometimes (always?) leaves the connection open. Since clients rely on the assumption that the connection will be closed after any error, they will generally not attempt to renew their subscriptions after encountering an ERROR frame without a subsequent disconnect, resulting in messages not being received. Steps to reproduce
We also observe this behavior in a clustered configuration. A client connected to RabbitMQ node A and subscribed to a queue residing on RabbitMQ node B, when node B receives a SIGTERM, the client will also be sent an ERROR frame, but its connection to node A still remains open. RabbitMQ versionRabbitMQ version: 3.8.4 Erlang configuration: Erlang/OTP 23 [erts-11.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:64] [hipe] Enabled plugins:
|
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 2 replies
-
This works as expected. Deletion of a queue results in a consumer notification. It is not a reason to close the connection: RabbitMQ distinguish between the two. This is different from, say, an unparseable frame, an unsupported or “unusable” or “unavailable” destination, and other errors that are unrecoverable. |
Beta Was this translation helpful? Give feedback.
This works as expected. Deletion of a queue results in a consumer notification. It is not a reason to close the connection: RabbitMQ distinguish between the two. This is different from, say, an unparseable frame, an unsupported or “unusable” or “unavailable” destination, and other errors that are unrecoverable.