[rabbitmq-discuss] No error reported when tx_select/basic_publish/tx_commit is given an undefined queue name?

Marek Majkowski majek04 at gmail.com
Thu Mar 29 11:52:52 BST 2012


On Thu, Mar 29, 2012 at 01:16, Matt Pietrek <mpietrek at skytap.com> wrote:
> I have a Pika code sequence that looks like this:
>
>                     channel = self._channel
>                     channel.tx_select()
>                     channel.basic_publish(exchange='',
>                         routing_key=queue_name,
>                         body=json_string,
>                         properties=pika.BasicProperties(delivery_mode=2))
>                     channel.tx_commit()
>
> During some robustness testing, I found that if I passed an invalid queue
> name to basic_get, I get an AMQPChannelError as expected. However, when
> using the above code to write a message to an invalid queue name, no
> exception is seen.
>
> Is this normal or am I missing something? In our scenario, we have to
> absolutely, positively know that the message was received by the broker.

Yes, this is normal.

AMQP does not allow you to send message to a "queue", instead, you
send a message to an exchange with a routing key.

This routing key is a queue name in this case but it can be just anything.

Messages sent with a routing key that is not matched by appropriate
binding will be lost. This is the correct behaviour.

If you need to ensure that message is delivered use 'mandatory' flag
on basic.publish:
http://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.publish

Cheers,
  Marek


More information about the rabbitmq-discuss mailing list