I'm developing a set of applications that work together to create a system for processing metering data. There's several reasons I want to have them loosely coupled and the system should be extensible by third parties, so the apps will be tied together via messaging.
I'm looking for a messaging system that offers bindings in (at least) C#, Java and Python and supports messaging patterns like Publish-Subscribe, Guaranteed Delivery, Selective Consumer (like Peek in .Net Messaging).
As far as I could find out, there's nothing wrong with JMS or .Net Messaging, it's just that they are for .Net / Java only.
The system should give me control over which transport mechanism (Sockets, Message Queues, etc.) to use when setting up a channel. I want to be able to both scale out to remote machines and speed things up with local transport facilities.
If I can't find anything suitable, I'll have to roll my own. I'd probably use Google's protocol buffers for serialization. If anybody has other recommendations for technology options, fire away.
Oh, yes - and I would like to have optional encryption on a per-channel or per-message basis.
ETA: Thanks for all the quick replies. I'm working my way through the docs & propaganda now. Has anybody used the technologies below, and for what / with what results?
activemq
http://activemq.apache.org/cross-language-clients.html
Supports all the following protocols
- OpenWire
- REST
- Stomp
- WS Notification
- XMPP
- AMQP
Thanks
Paul
SonicMQ might be a tool you're looking for. I know they are heavy into Progress but that they also support other language alternatives as well and are a leading player in the Messaging sector.
Sonic Software
As Paul mentioned, try ActiveMQ which supports many language clients and wire protocols.
BTW ActiveMQ 6.x will probably be using Google's protocol buffers as one of its underlying wire transports :)
I've used Apache ActiveMQ on many projects to great success. Its the most popular and powerful open source message broker around today.
Incidentally on .Net / C# the ActiveMQ project has created the NMS API which is a standard API for communicating with message brokers on the .Net platform which is now integrated into Spring.Net
You could use an ESB (Enterprise Service Bus) like Mule. The idea is that you send your messages to the Bus in any way you want (JMS, http, email) and the bus does the routing for you. I don't know if there are .NET bindings, but even if there aren't any available, you can build your own using an extension mechanism. Of course, this means you need to set up a bus somewhere.
If you want rock solid, commercial support and integration to just about anything, IBM's MQ Series, now Websphere MQ provides all the features described in your requirements.
Sometimes you do get what you pay for... ;-)
If you want a multilanguage "standard" -- meaning you are not tied to using a specific broker / intermediary like ActiveMQ, SonicMQ, or WebsphereMQ -- I strongly suggest you look at the AMQP standard (http://www.amqp.org) and related brokers (RabbitMQ, QPid, OpenAMQ; see http://www.amqp.org/confluence/display/AMQP/AMQP+Products).
Open Message Queue (Open MQ) is included in the GlassFish application Server and also runs stand-alone. It starts up in a few seconds, and supports Java and C client. Stomp support is currently in development in version 4.4.