Skip to content

Conversation

ansd
Copy link
Member

@ansd ansd commented Aug 15, 2025

What?

Refuse or detach the link instead of ending the session for many
link-level errors, including the following:

  • Source queue or target exchange doesn't exist during attach
  • Trying to consume from an exclusive queue on a different connection
  • Delivery of message to a target queue fails
  • Wrong delivery-id
  • Wrong settled flag
  • Queue declaration fails for dynamic queues
  • Publishing to internal exchange

Why?

Because many errors are scoped to a single terminus, detaching just that link
preserves the rest of the session’s links - avoiding needless disruption of
other traffic. AMQP 1.0’s error model is hierarchical; RabbitMQ should escalate to
ending the session only for session-level faults or if the client keeps
using a destroyed link.

How?

Refuse link as per figure 2.33

@ansd ansd self-assigned this Aug 15, 2025
@ansd ansd force-pushed the refuse-link branch 4 times, most recently from 7992976 to ce969f6 Compare August 15, 2025 12:51
acogoluegnes added a commit to rabbitmq/rabbitmq-amqp-java-client that referenced this pull request Aug 18, 2025
acogoluegnes added a commit to rabbitmq/rabbitmq-amqp-java-client that referenced this pull request Aug 18, 2025
@michaelklishin michaelklishin changed the title Refuse link AMQP 1.0, figure 2.33: refuse link instead of terminating the entire session Aug 18, 2025
@ansd ansd force-pushed the refuse-link branch 3 times, most recently from 294b30a to c69c33e Compare August 26, 2025 13:38
 ## What?
Refuse or detach the link instead of ending the session for many
link-level errors, including the following:
* Source queue or target exchange doesn't exist during attach
* Trying to consume from an exclusive queue on a different connection
* Delivery of message to a target queue fails
* Wrong delivery-id
* Wrong settled flag
* Queue declaration fails for dynamic queues
* Publishing to internal exchange

 ## Why?
Because many errors are scoped to a single terminus, detaching just that link
preserves the rest of the session’s links - avoiding needless disruption of
other traffic. AMQP 1.0’s error model is hierarchical; RabbitMQ should escalate to
ending the session only for session-level faults or if the client keeps
using a destroyed link.

 ## How?
Refuse link as per figure 2.33
@ansd ansd changed the title AMQP 1.0, figure 2.33: refuse link instead of terminating the entire session Detach link for link-level errors Aug 27, 2025
@ansd ansd added this to the 4.2.0 milestone Aug 27, 2025
@ansd ansd marked this pull request as ready for review August 27, 2025 07:51
@ansd ansd merged commit 81caabc into main Aug 27, 2025
283 checks passed
@ansd ansd deleted the refuse-link branch August 27, 2025 15:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant