Stomp plugin closes connection on "inequivalent arg 'x-dead-letter-exchange'" error

1,502 views
Skip to first unread message

michael...@gmx.net

unread,
Jun 12, 2015, 5:53:28 AM6/12/15
to rabbitm...@googlegroups.com

If the Stomp client tries to subscribe to a queue with a (mismatching) x-dead-letter-exchange set, the broker immediately closes the socket connection.

However, if the Stomp client tries to subscribe to a queue with a (mismatching) x-max-priority set, the broker sends a Stomp error frame back to the client with the error description, and does not close the connection.

I suggest to treat the first error situation in the same way, which allows to see the error message on the client side in the Stomp error frame in both cases.

Here is a broker log which shows the different server reactions to the mismatching queue args:

=ERROR REPORT==== 12-Jun-2015::11:37:01 ===
Channel error on connection <0.4321.0> (127.0.0.1:49446 -> 127.0.0.1:61613, vhost: '/', user: 'guest'), channel 1:
{amqp_error,precondition_failed,
            "inequivalent arg 'x-max-priority' for queue 'priority_queue' in vhost '/': received none but current is the value '9' of type 'long'",
            'queue.declare'}

=ERROR REPORT==== 12-Jun-2015::11:37:01 ===
STOMP error frame sent:
Message: precondition_failed
Detail: "PRECONDITION_FAILED - inequivalent arg 'x-max-priority' for queue 'priority_queue' in vhost '/': received none but current is the value '9' of type 'long'\n"
Server private detail: none

=INFO REPORT==== 12-Jun-2015::11:37:01 ===
closing STOMP connection <0.4318.0> (127.0.0.1:49446 -> 127.0.0.1:61613)

=INFO REPORT==== 12-Jun-2015::11:37:13 ===
accepting STOMP connection <0.4338.0> (127.0.0.1:49447 -> 127.0.0.1:61613)

=ERROR REPORT==== 12-Jun-2015::11:37:13 ===
Channel error on connection <0.4341.0> (127.0.0.1:49447 -> 127.0.0.1:61613, vhost: '/', user: 'guest'), channel 1:
{amqp_error,precondition_failed,
            "inequivalent arg 'x-dead-letter-exchange' for queue 'queue_with_dlx' in vhost '/': received none but current is the value 'dlx.exchange.name' of type 'longstr'",
            'queue.declare'}

=ERROR REPORT==== 12-Jun-2015::11:37:13 ===
** Generic server <0.4337.0> terminating
** Last message in was {'EXIT',<0.4347.0>,
                           {shutdown,
                               {server_initiated_close,406,
                                   <<"PRECONDITION_FAILED - inequivalent arg 'x-dead-letter-exchange' for queue 'queue_with_dlx' in vhost '/': received none but current is the value 'dlx.exchange.name' of type 'longstr'">>}}}
** When Server state == {state,"session-gfjnKs0tYwZu-ZqDNSSYbw",<0.4347.0>,
                            <0.4341.0>,
                            {dict,0,16,16,8,80,48,
                                {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                                 []},
                                {{[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                                  [],[]}}},
                            "1.2",#Fun<rabbit_stomp_reader.1.50399846>,
                            undefined,
                            {stomp_configuration,"guest","guest",false,false},
                            {set,1,16,16,8,80,48,
                                {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                                 []},
                                {{[],[],[],[],[],[],[],[],[],[],[],
                                  [<<"queue_with_dlx">>],
                                  [],[],[],[]}}},
                            {dict,0,16,16,8,80,48,
                                {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                                 []},
                                {{[],[],[],[],[],[],[],[],[],[],[],[],[],[],
                                  [],[]}}},
                            #Fun<rabbit_stomp_processor.5.63782375>,
                            {amqp_adapter_info,
                                {127,0,0,1},
                                61613,
                                {127,0,0,1},
                                49447,
                                <<"127.0.0.1:49447 -> 127.0.0.1:61613">>,
                                {'STOMP',0},
                                [{ssl,false}]},
                            #Fun<rabbit_stomp_reader.0.22944995>,none,
                            {127,0,0,1}}
** Reason for termination ==
** {channel_died,
       {shutdown,
           {server_initiated_close,406,
               <<"PRECONDITION_FAILED - inequivalent arg 'x-dead-letter-exchange' for queue 'queue_with_dlx' in vhost '/': received none but current is the value 'dlx.exchange.name' of type 'longstr'">>}}}

=INFO REPORT==== 12-Jun-2015::11:37:13 ===
closing STOMP connection <0.4338.0> (127.0.0.1:49447 -> 127.0.0.1:61613)

Michael Klishin

unread,
Jun 12, 2015, 6:11:54 AM6/12/15
to rabbitm...@googlegroups.com, michael...@gmx.net
 

On 12 June 2015 at 12:53:30, michael...@gmx.net (michael...@gmx.net) wrote:
> > If the Stomp client tries to subscribe to a queue with a (mismatching)
> x-dead-letter-exchange set, the broker immediately closes
> the socket connection.
>
> However, if the Stomp client tries to subscribe to a queue with
> a (mismatching) x-max-priority set, the broker sends a Stomp
> error frame back to the client with the error description, and
> does not close the connection.
>
> I suggest to treat the first error situation in the same way, which
> allows to see the error message on the client side in the Stomp
> error frame in both cases.

Interesting. Please file an issue on GH, this may be the root cause of
another issue reported past 3.5.2.

A small script in any language that reproduces the issue would be appreciated. 

Thank you.
--
MK

Staff Software Engineer, Pivotal/RabbitMQ


Reply all
Reply to author
Forward
0 new messages