On Wed, Mar 18, 2009 at 8:26 PM, Gordon Sim <g...@redhat.com> wrote:

> I think, as has been discussed on this list recently, that getting some
> higher level, protocol-independent APIs for those languages that don't
> currently have them is a necessary first step and one that will be valuable
> regardless.

I think this is going to be really helpful for client applications,
most of which don't really want to be tied to protocol versions.

The Java client uses JMS for this to an extent, but we still need a
way of exposing AMQP specific things in ways that are as version
independent as possible (such as the mandatory flag). I've been
kicking around the idea of something like this:

JMSSession -> AMQSession -> AMQ_[ver]_session

With only things that are supported by all version fo AMQP in
AMQSession. This does lead to a couple of problems though, such as
features that are in all but one version of spec.

The other option I was considering was something like

JMSSession -> AMQSession -> AMQPre10Session -> AMQ010Session

but I think that may be over engineering for the sake of over engineering.

> The broker has some limited support for multiple protocols at present, but
> they are really the remnants of upgrading from 0-9 'wip' to one version of
> 0-10 and then onto the final 0-10 without breaking the build and test
> suites. I think some thinking and design around improving that in general
> terms would also be a valuable step forwards.

The java server supports 0-8 and 0-9, but they're really additional
protocol dialects. 0-10 and, in particular, 1-0 have somewhat more
substantial semantic differences. In order to properly support them I
think they key is to have as modular a server as possible.

I've written up some of the improvements to the java server I think
should be made here:
http://qpid.apache.org/java-broker-modularisation.html (that page
needs to be updated a little since some of the works been done in
0.5).

The idea is that the core of the server does the basic work of taking
a message, putting it on disk, putting on a queue, taking it from a
queue and giving it to the client. The details of that, such as how
what message goes on what queue before being delivered to a consumer
and the protocol used to transfer messages, are implemented by 1 or
more plugins which contribute queues, protocol packs, admin wiring
etc.

There are still some significant details to work out, particularly
around administration and translating messages from one protocol
version to another. Clearly nirvana here is for a 0-8 client to be
able to connect, send a message and have it go to 0-9, 0-10 and 1-0
clients and it Just Works. Similarly, persistence plugins shouldn't
have to care about the type of message that they get - they should be
able to persist any of them.

- Aidan
-- 
Apache Qpid - World Domination through Advanced Message Queueing
http://qpid.apache.org

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

Reply via email to