Tuesday, 26 May 2009

RabbitMQ client version 1.5.3, licensing and Message Enumerators

Been busy the last week or so on the System.Messaging/AMQP integration on Mono, I updated the RabbitMQ client library to version 1.5.3, only to have them release a new version of the library (1.5.5) literally the day after. Mirco Bauer, who handles the packaging for Debian, ran into a bit of a problem with the way we included the RabbitMQ library. Unfortunately the AMQP spec files are not considered Free under the terms of the DFSG, which is not much of a problem as we do not use them during the build. However, the .cs files that are generated from the specs contained comments that were extracted verbatim from said specs, which make the .cs files non-free too. Anyway, to cut a long story short, I've patched the RabbitMQ code generator and pushed the patch back upstream so that we can generate the .cs files without comments and I'm in the process of fixing the generated files in Mono's trunk and 2.4 branch.

As far as actual new functionality goes, I've updated the MessageEnumerator support, so that MoveNext(TimeSpan timeout) and RemoveCurrent(TimeSpan timeout) are both supported. I've also added calls for all of the other methods through to Mono.Messaging provider layer, unfortunately the way transactions work in AMQP make it impossible use the transactional methods of MessageEnumerator (personally I blame the System.Messaging API design, but that's a rant for a different blog post). If you need transactions, then you stick to the methods in MessageQueue, which are supported.

P.S. Hello Monologue, thanks to Miguel for kindly adding me to the group of Mono bloggers.

Wednesday, 20 May 2009

Back to reality

I've been home from my round the world backpacking for a couple of weeks now and just getting back into the Mono/AMQP integration stuff. I've committed my first patch in nearly 4 months, which adds support for initialising the Messaging Provider dynamically. E.g for the current RabbitMQ implementation you need to set an environment variable.
export MONO_MESSAGING_PROVIDER="Mono.Messaging.RabbitMQ.RabbitMQMessagingProvider,Mono.Messaging.RabbitMQ"
Now to update the RabbitMQ libraries.

P.S. I'm looking for a job in London at the moment, if anyone is on the lookout for a Software Engineer/Solution Architect with 9 years of Java/C#/C++ you can contact me at "mikeb01 (at) gmail (dot) com"