On 11/28/2013 06:29 PM, Gordon Sim wrote:
On 11/28/2013 05:40 PM, Bruno Matos wrote:
Hello,

I'm using dynamic routes between two federated Brokers and I'm having
some problems.
Here is the scenario: I have one client connected to one Broker (A),
which sends a request to a service witch is connected to another Broker
(B). There is a dynamic route from Broker B to A, on exchange amq.direct.
The client creates a queue, sends a binding request for the queue with a
given address to Broker A via qmf (it's more complicated that this, but
I think this is a good representation of the process), when the answer
to that binding request arrives, it sends a request to the service
connected to Broker B with a ReplyTo set for the address that it
initially asked the binding. Most of the time the response message
arrives without problems, but once in a while, the response message is
lost.
Is it possible that the service at Broker B answers before the binding
to the 'federation' queue is made?

The propagation of the binding is asynchronous, so it is not guaranteed that B has received the bind request from A at the point your client receives confirmation of the bind from A.

You don't mention how the federation is set up in order to get the request from A to B. Assuming it is being pulled by B, it will be going over a different connection than that used to send the bind request from A to B.

So it is possible that B gets the message before it gets the bind request and I suppose even possible in theory that it delivers the message to the service and receives a response back from the service before the bind is acted on.

I'm not sure how best to handle that. The client could I suppose try to send itself a message via broker B - e.g. have a fanout exchange on A with a static route to the dynamically federated exchange on B, send a message to that with the appropriate routing key - and then wait for that message to arrive before sending the service request. A bit over complicated however...
I have a binding manager service in A to handle bindings requests (the part that I omitted in previous email). My first approach will be having this manager waiting for the binding event on 'federated' B queue, to send the answer to the binding request made by the client, this will force the client to wait before send the request.

Reply-to in general is not well handled by federation at all. I made a stab at improving this a little for the 1.0 implementation and Ted has focused on making reply-to work much transparently with the Dispatch Router.

I've tried that approach, as you may remember, but I was not able to fulfill all the requirements for the Windows client, so I'm making a middle step.

Thank you,
Regards.

--
Bruno Matos


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to