2 Replies Latest reply on May 24, 2006 4:53 AM by Tim Fox

    Flawed deliver() semantics

    Tim Fox Master

      The operation Channel::deliver(Receiver r) synchronously delivers a reference to the receiver.

      I.e. it serves exactly the same purpose as a method MessageReference receive() it's just a long winded way of doing the same thing.

      This is all works ok on a single node, but when we consider a clustered case where we have the "active" queue on node A, and the receiver on node B, then it still works but it's inefficient since we would require one network RPC for the deliver() and another for the invocation of handle() on the receiver.

      Proposal is to get rid of deliver(Receiver r) on the channel and replace with MessageReference receive().

      As a side effect this should also simplify ServerConsumerDelegate code since we're not having to jump through hoops when all we want to do is a simple receive() anyway.