Hi,

I am having some issues with bindings persisting on federated brokers.

My main aim is to have a number of brokers (3 in this example) federated,
using dynamic routes, so as a binding that is made/destroyed with a single
broker is replicated across all the federated brokers. I want the federated
brokers to be logically a single broker, therefore a message sent to any
one of the brokers can be received by an consumer. Further I want to use
headers exchange so the consumers only receive messages that they are
interested in based on fields in the headers.

To do this I have 3 qpid brokers running (qpidd (qpid-cpp) version 0.24),
they are all running on the same host on different ports.

I add a headers exchange to each broker:
./qpid-config -a localhost:10003 add exchange headers test_header_ex
./qpid-config -a localhost:10004 add exchange headers test_header_ex
./qpid-config -a localhost:10005 add exchange headers test_header_ex

I federate the exchanges between the brokers
./qpid-route dynamic add localhost:10003 localhost:10004 test_header_ex
./qpid-route dynamic add localhost:10004 localhost:10003 test_header_ex
./qpid-route dynamic add localhost:10004 localhost:10005 test_header_ex
./qpid-route dynamic add localhost:10005 localhost:10004 test_header_ex

a route map shows the federation has worked with broker running on 10004
being a common node between 10003 and 10005
./qpid-route route map localhost:10004

    Finding Linked Brokers:
        localhost:10004... Ok
        localhost:10003... Ok
        localhost:10005... Ok

    Dynamic Routes:

      Exchange test_header_ex:
        localhost:10004 <=> localhost:10003
        localhost:10005 <=> localhost:10004

    Static Routes:
      none found

now I run drain with options added to the address string to bind to the
exchange based on a specific header field  --this is a consumer registering
interest in a message with header value m-id = 123

./drain -f -b localhost:10003 "test_header_ex;{node:{x-
declare:{auto-delete:true}},link:{x-declare:{arguments:{
no-local:true}},x-bindings:[{auto-delete:true,exchange:'
test_header_ex',key:'key1',arguments:{x-match:'all',m-id:'123'}}]}}"

use qpid-stat to look at the bindings created on each broker - a binding
has been made to each

[image: Inline image 1]
kill drain and look at the bindings again using qpid-stat - there is a
binding still on the 10005 broker
[image: Inline image 2]

This was not how I understood dymanic routes to operate:
1.4.1.3. Dynamic Exchange Routes
Dynamic exchange routes allow a client to create bindings to an exchange on
one broker, and receive
messages that satisfy the conditions of these bindings not only from the
exchange to which the client
created the binding, but also from other exchanges that are connected to it
using dynamic exchange routes.
If the client modifies the bindings for a given exchange, they are also
modified for dynamic exchange
routes associated with that exchange.

Any suggestions of how to remedy this gratefully received!

Thanks,
dd

Reply via email to