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

Pieter de Zwart pdezwart at rubiconproject.com
Mon Nov 29 16:38:38 GMT 2010


Ah, thank you for the detailed response David, that makes much more sense.
Pieter


On 11/27/10 10:25 PM, "David Wragg" <david at rabbitmq.com> wrote:

> 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



More information about the rabbitmq-discuss mailing list