You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Keith Wall (Jira)" <ji...@apache.org> on 2019/09/20 12:48:00 UTC

[jira] [Comment Edited] (ARTEMIS-2494) Artemis responds with disposition Rejected if queue is full

    [ https://issues.apache.org/jira/browse/ARTEMIS-2494?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16934372#comment-16934372 ] 

Keith Wall edited comment on ARTEMIS-2494 at 9/20/19 12:47 PM:
---------------------------------------------------------------

The sending of the reject disposition in a queue full situation (or any other transient error condition) is wrong from an AMQP perspective.    Reject [1] signals "that an incoming message is invalid and therefore unprocessable" to the sender of the message.  To the sender this means that the message is "undeliverable anywhere", so it is entitled to drop the message.  This is the wrong behaviour when the queue is full.  There is nothing wrong with the message, it is just we are unable to handle its arrival right now.   We want the sender to try this message again when the queue is not full. The sending of a {{Modified delivery-failed}} is the correct.    (It is unfortunate the Modified cannot convey a textual reason).

This issue affects EnMasse's messaging forwarding use-case.  Here the sender of the message (the forwarder) is ultimately another Artemis Broker.   When it sees a reject, it discards the message from the queue so the message is lost (ARTEMIS-2497). 

[1] http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-rejected


was (Author: k-wall):
The sending of the reject disposition in a queue full situation (or any other transient error condition) is wrong from an AMQP perspective.    Reject [1] signals "that an incoming message is invalid and therefore unprocessable" to the sender of the message.  To the sender this means that the message is "undeliverable anywhere", so it is entitled to drop the message.  This is the wrong behaviour when the queue is full.  There is nothing wrong with the message, it is just we are unable to handle its arrival right now.   We want the sender to try this message again when the queue is not full. The sending of a {{Modified delivery-failed}} is the correct.    (It is unfortunate the Modified cannot convey a textual reason).

This issue affects EnMasse's messaging forwarding use-case.  Here the sender of the message (the forwarder) is ultimately another Artemis Broker.   When it sees a reject, it discards the message so the message is lost (ARTEMIS-2497). 

[1] http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#type-rejected

> Artemis responds with disposition Rejected if queue is full
> -----------------------------------------------------------
>
>                 Key: ARTEMIS-2494
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-2494
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: AMQP
>    Affects Versions: 2.10.0
>            Reporter: Ulf Lilleengen
>            Priority: Major
>
> When a queue is full, Artemis will respond with disposition=Rejected. In certain situations, it is desirable to receive a Modified in this case, so that a client may re-queue the message for re-delivery (this is what Artemis does if consumers respond with released or modified for instance).
>  
> The current behavior is determined by ProtonServerReceiverContext#actualDelivery . It would be great if this method could respond with Modified instead in the event of the exception being an ActiveMQAddressFullException.
>  
> This behavior should probably be exposed as a configuration option to avoid breaking existing behavior.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)