[rabbitmq-discuss] Queue.declare arguments

Simon MacMullen simon at rabbitmq.com
Tue Oct 11 10:51:05 BST 2011

On 11/10/11 07:37, Pieter de Zwart wrote:
> I am trying to implement support for passing arguments to queue.declare
> in the PHP extension for AMQP. Based on the docs, arguments are up to
> the server to implement, but are based on an amqp_table_t structure.
> Based on previous email threads and some basic research, the full list
> of supported keys for the table seem to be: x-expires, x-message-ttl,
> x-ha-policyand x-ha-policy-params. Is this still the complete list?

It is today. And I don't think any more arguments are on the drawing 
board right now, but we may well introduce more in the future.

It's worth pointing out that arguments matter for more than just queues, 
they can be used with exchanges (we implement one extension argument, 
"alternate-exchange") and also as part of routing with the headers 
exchange type (for which you need to be able to set arbitrary arguments 
on bindings).

> It
> seems like I should just give people the ability to set any key they want.

That is the right thing to do, and it's what we do in our clients.

> The definition of an amqp_table_entry is a key (amqp_bytes) and value
> (amqp_field_value_t). The latter has a definition of:
> typedef struct amqp_field_value_t_ { char kind; union { amqp_boolean_t
> boolean; int8_t i8; uint8_t u8; int16_t i16; uint16_t u16; int32_t i32;
> uint32_t u32; int64_t i64; uint64_t u64; float f32; double f64;
> amqp_decimal_t decimal; amqp_bytes_t bytes; amqp_table_t table;
> amqp_array_t array; } value; } amqp_field_value_t;
> Im assuming therefore that I can shove any kind/value combo for any key,
> and let the rabbitmq-c client/broker figure out the details. Is that
> correct?

Not really - the values in AMQP are typed. These types will be pushed 
through unchanged by the C client, but the broker will want you to set 
sensible types. We try to be reasonably flexible, but if you're setting 
the x-expires argument for example then we'll expect one of the integer 
types; we won't just parse a string.

Cheers, Simon

Simon MacMullen
RabbitMQ, VMware

More information about the rabbitmq-discuss mailing list