[rabbitmq-discuss] DQOTD: Is publishing to an undeclared exchange ok?

David Wragg david at rabbitmq.com
Sun Nov 28 06:25:13 GMT 2010

Pieter de Zwart <pdezwart at rubiconproject.com> writes:
> My Dumb Question Of The Day (registered) is: What is the expected behavior
> when publishing to an exchange that has not been previously declared? It
> seems that if I do that using the C client, the message disappears into the
> void without so much as a peep.

Publishing a message in AMQP is a fully asynchronous operation: The
client sends a basic.publish method to the server, and does not wait for
any kind of reply.  So there is no way for the amqp_basic_publish
function to return an error in this case.

But, the next synchronous operation you do on the channel should return
the error.

For example, with the amqp-publish utility in the rabbitmq-c tools
directory, if you do:

  $ tools/amqp-publish -e nosuch -b "hello"

It responds with the error:

  closing channel: server channel error 404, message: NOT_FOUND - no
  exchange 'nosuch' in vhost '/'

As the prefix to this error suggests, the error is being reported from
amqp_channel_close, because in publish.c, that is the synchronous
operation following the amqp_basic_publish call.

> The only reason I ask is that I wan the PHP client to behave in the most
> appropriate manner, matching that of the client and broker.

Currently, if you want to get localize errors to particular
amqp_basic_publish calls, you'll need to follow each one with a
synchronous operation to collect the error.  Opening and closing a
channel around each publish is perhaps the most obvious way to do this.


David Wragg
Staff Engineer, RabbitMQ
SpringSource, a division of VMware

More information about the rabbitmq-discuss mailing list