[Mono-dev] [PATCH] System.Messaging/AMQP: Receive, Send and Peek implementation

Michael Barker mike at middlesoft.co.uk
Sun Dec 7 01:34:10 EST 2008


Hi,

I have created a bugzilla entry
(https://bugzilla.novell.com/show_bug.cgi?id=457089) that contains 4
patches that add a chunk of functionality to the AMQP/System.Messaging
implementation.  If possible, could someone commit them to the
messaging-2008 branch.

The patches add full support Peek, Receive and Send methods in
MessageQueue, including transactions, selecting by id and correlation
id, and with timeouts.  AMQP doesn't support all of the this
functionality natively so some features have a sub-optimal
implementation.  Specifically the XXXById and XXXByCorrelationId
methods which pick up the messages from queue and performs the
matching on the client side.  The main features that are still
outstanding authentication, permissions, and encryption.
MessageEnumerators are implemented, but the transactional
RemoveCurrent methods can't be implemented due to the way transactions
work with AMQP, however the non-transactional RemoveCurrent works
fine.

Another feature not support directly by AMQP is queue discovery.  It
uses a declare model for getting queues, i.e. if-not-exist-create, and
there is no mechanism for getting a list of existing queues.  At the
moment this is implemented with a bit of a hack, the MessagingProvider
hangs on a hashtable of the queues that have been created.  Therefore
queues don't "exist" until they have been created with the current
process and are declared in a whenever a queue is used.  While not
100% correct, it will work as long as clients do the following:

string path = @".\private$\my-queue";
MessageQueue q;
if (MessageQueue.Exists(path) {
    q = MessageQueue.Create(path);
else
    q = new MessageQueue(path);

Which is fairly common pattern for using System.Messaging.

Mike


More information about the Mono-devel-list mailing list