You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@qpid.apache.org by Jiri Krutil <ji...@krutil.com> on 2011/07/03 10:04:27 UTC

Binding declaration in C++ messaging client

Hi

Using the C++ messaging client, I would like to declare a binding from
exchange E to queue Q without declaring the exchange or the queue;
assuming both already exist. (I want to avoid their declaration because
I don't know all their attributes, so in case they don't exist, I want
to get an error.)

Is this perhaps possible by creating a Sender to an exchange that always
exists (say amq.direct) and specifying my binding between E and Q in the
Address (in the x-bindings list under node)?

Cheers
Jiri


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: Binding declaration in C++ messaging client

Posted by Gordon Sim <gs...@redhat.com>.
On 07/04/2011 01:23 PM, Jiri Krutil wrote:
>>> Using the C++ messaging client, I would like to declare a binding from
>>> exchange E to queue Q without declaring the exchange or the queue;
>>> assuming both already exist. (I want to avoid their declaration because
>>> I don't know all their attributes, so in case they don't exist, I want
>>> to get an error.)
>>>
>>> Is this perhaps possible by creating a Sender to an exchange that always
>>> exists (say amq.direct) and specifying my binding between E and Q in the
>>> Address (in the x-bindings list under node)?
>>
>> Yes, but the x-bindings should then appear in the link, not the node.
>> The node bindings are evaluated only if the node needs to be created.
>> The link bindings are evaluated whenever a 'link' to or from the node,
>> i.e. a sender or receiver, is created.
>>
>> E.g. Assuming an exchange my-exchange and queue my-queue (which were
>> separately configured or pre-exist), I can create a sender to:
>>
>>     my-exchange/my-key; {link:{x-bindings:[{exchange:my-exchange,
>> queue:my-queue, key:my-key}]}}
>>
>> which on creation will result in the binding being created. Note however
>> that the binding will be destroyed when the sender is closed.
>
> I simply need to bind a queue to an exchange and I need the binding to
> stay there even if I disconnect. I don't want to declare the queue or
> the exchange or send or receive any messages.
>
> Can I do this using the C++ messaging client?

Yes, providing you are using an 0.10 broker you can send it an explicit 
bind message.

Send a map message to 'qmf.default.direct/broker'. The map must have 
three entries:

The first entry has key '_object_id' whose value is a nested map which 
contains a single entry with key '_object_name' and value 
'org.apache.qpid.broker:broker:amqp-broker'.

The second entry has key '_method_name' and the value should in this 
case be 'create'.

The third entry has key '_arguments' and the value should be a nested 
map in which the named arguments for the command are contained. The 
required arguments in this case are: (i) 'type' = 'binding' and (ii) 
'name' = <exchange-name>/<queue-name>/<binding-key> (e.g. 
name=amq.direct/my-queue/my-subject). You can specify any additional 
arguments for the binding as well.

In addition to correctly formatted content, there are two message
properties that must also be set. These are 'x-amqp-0-10.app-id',
which should always have the value 'qmf2' and 'qmf.opcode' which for
commands should always have the value '_method_request'.

You can set a reply to address on the message and a response will be 
sent back on creation of the binding.

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: Binding declaration in C++ messaging client

Posted by Jiri Krutil <ji...@krutil.com>.
> > Using the C++ messaging client, I would like to declare a binding from
> > exchange E to queue Q without declaring the exchange or the queue;
> > assuming both already exist. (I want to avoid their declaration because
> > I don't know all their attributes, so in case they don't exist, I want
> > to get an error.)
> >
> > Is this perhaps possible by creating a Sender to an exchange that always
> > exists (say amq.direct) and specifying my binding between E and Q in the
> > Address (in the x-bindings list under node)?
> 
> Yes, but the x-bindings should then appear in the link, not the node. 
> The node bindings are evaluated only if the node needs to be created. 
> The link bindings are evaluated whenever a 'link' to or from the node, 
> i.e. a sender or receiver, is created.
> 
> E.g. Assuming an exchange my-exchange and queue my-queue (which were 
> separately configured or pre-exist), I can create a sender to:
> 
>    my-exchange/my-key; {link:{x-bindings:[{exchange:my-exchange, 
> queue:my-queue, key:my-key}]}}
> 
> which on creation will result in the binding being created. Note however 
> that the binding will be destroyed when the sender is closed.

I simply need to bind a queue to an exchange and I need the binding to
stay there even if I disconnect. I don't want to declare the queue or
the exchange or send or receive any messages.

Can I do this using the C++ messaging client?


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org


Re: Binding declaration in C++ messaging client

Posted by Gordon Sim <gs...@redhat.com>.
On 07/03/2011 09:04 AM, Jiri Krutil wrote:
> Using the C++ messaging client, I would like to declare a binding from
> exchange E to queue Q without declaring the exchange or the queue;
> assuming both already exist. (I want to avoid their declaration because
> I don't know all their attributes, so in case they don't exist, I want
> to get an error.)
>
> Is this perhaps possible by creating a Sender to an exchange that always
> exists (say amq.direct) and specifying my binding between E and Q in the
> Address (in the x-bindings list under node)?

Yes, but the x-bindings should then appear in the link, not the node. 
The node bindings are evaluated only if the node needs to be created. 
The link bindings are evaluated whenever a 'link' to or from the node, 
i.e. a sender or receiver, is created.

E.g. Assuming an exchange my-exchange and queue my-queue (which were 
separately configured or pre-exist), I can create a sender to:

   my-exchange/my-key; {link:{x-bindings:[{exchange:my-exchange, 
queue:my-queue, key:my-key}]}}

which on creation will result in the binding being created. Note however 
that the binding will be destroyed when the sender is closed.

---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:users-subscribe@qpid.apache.org