[rabbitmq-discuss] DQOTD: Is publishing to an undeclared exchange ok?
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
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.
Staff Engineer, RabbitMQ
SpringSource, a division of VMware
More information about the rabbitmq-discuss