On 02/25/2014 06:16 PM, Gao, Jie (Kyrie, HPIT-DS-CDC) wrote:
I still have some questions. Hope I didn't bother you too much.
Not at all!
I will still use this model to explain my question.
A(on node 1) ---> B (on node 2)
Does the direction of the arrow indicate the flow of messages?
Correct, the qpid-route tool will connect to the first broker details and ask
it to create the route/link. The first broker will then establish a TCP socket
to the second and after going through the AMQP connection protocol, (by
default) subscribe to receive messages as directed.
The first broker in qpid-route is dest broker. Do you mean 'B' here?
If B is the broker to which the messages should go, then yes, it would
be the destination broker.
But from your next explanation 'A' sounds more reasonable.
I assumed A and B were the first and second brokers passed to the
qpid-route command. It sounds like you are using those labels with some
additional meaning (e.g. that messages flow from A to B?)
But..er..but why we can establish a route without 'A'? I mean I can use "qpid-route
route add B A xxxx xxx" to create a route successfully (well I just see no error
return) when 'A' is actually missing. I can later start to run broker 'A'. so if 'A' is
the one which need to link to 'B', how can it possibly know who is 'B'? since when we run
qpid-route to add a route, we don’t have 'A'.
Again, the definition of the route is considered separately from its
actual status at any time. The qpid-route tool only connects to *one*
broker. The other broker is passed to the first broker as the details to
which that first broker should connect to. The route is defined once the
first broker is told about the details. That broker will then
asynchronously attempt to establish the link (and will retry until it
does, and will also keep retrying if it is then ever disconnected).
It is therefore A that records the existence of this interbroker link.
From the point of view of B, A is (almost) just like any other client.
The broker B doesn't really know about the route. It is A that has that
knowledge. It is always A that will attempt to re-establish the connection. If
the connection between them is broker A will keep retrying indefinitely to
reconnect. A can also durably record the details of the link such that if it
restarts it can again resume trying to establish the connection.
It sounds that if 'A' and 'B' are both active and also route is there. The connection
between 'A' and 'B' will always be okay? But in one of our project we have met such
problem (well it's very hard to reproduce): node 1 where 'A' is running is down and after
for a while node 1 is up again and 'A' is also active again. We check 'A' and 'B', both
are running. And we also check "qpid-route route list xxx" and found there is a
route between 'A' and 'B'. but the result is there is no message flow between 'A' and 'B'.
What was the status of that route? Were there any errors in the broker
logs (on either broker)?
Some additional debug information would be listing the queues bound to
the exchange the route is from (qpid-config -R exchanges) and getting
details of the connections and subscriptions that are active (qpid-stat
-c and qpid-stat -u respectively).
after we kill 'B' and restart 'B' and use "qpid-route route add B A xxx xxx",
everything is okay then. So it sounds there is a stale route between 2 brokers. If 'A'
can durably record the details of the link and even it can establish the connection after
it resume. Er..I don’t think this issue will happen. Wait. How can 'A' record the
details? Maybe save information in a file? Maybe it's because 'A' lost these information?
To summarize my questions:
1) what will happen when only broker 'B' is active and meanwhile we run "qpid-route
route add B A xx xxx" to add a route? According to Pavel Moravec's mail, 'B' will
try to link to 'A' for several times until it gives up.
B will try to link to A forever (or at least until the route is deleted).
But you just said it's 'A' which will establish the route. I felt confused here.
Sorry, that was my misunderstanding of what was implied by the labels A
and B. (As above, I had assumed A was the first parameter to qpid-route
and B was the second)
2) Is it possible to have both 'A' and 'B' and route available but still cannot
pass the message?
Yes, it is possible that A and B are up, and that a link is defined, but
that it is not active due to some error condition. The status should be
communicated by listing the route, and the broker logs would contain
errors if any occurred.
3) sorry I just think one more problem: I just noticed that there is an option called " -d,
--durable Added configuration shall be durable". I found the explain " A durable
route survives broker restarts, restoring a route as soon as both the source broker and the
destination are available. If the connection to a destination is lost, messages associated with a
durable route continue to accumulate on the source, so they can be retrieved when the connection is
reestablished.". So if I added -b when I add a route, would it be helpful to solve the
question 2?
If the problem is that the broker on which the route is defined restarts
and therefore loses its definition of the route, then yes, making the
route durable would help (you need to ensure you have a store enabled in
order for the persistence to actually work).
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]