I am thinking of implementing a queue in one of the projects I am working on right now (sorry cannot go into more details until it gets published – hopefully in a few months). Anywyas, this is in C++ which needs to run on Ubuntu and my queueing experience (with C++ or otherwise) is only with MSMQ which is brilliant, but does not help me here as that run only on Windows. I also cannot use something like STL Queue as this will need to run across a number of machines and trying to sync between them would a royal pain. In other words, this needs to be distributed and async “loose” messaging. 🙂
I am already using MOOS, so one option is for me to continue to use that – however this is for another part of the application and it might be easier for me to use something else (still need to think it through a little more).
These are the requirements (these are must haves!). Also if it makes a difference I am using CDT for this project.
- Needs to be able to run on Ubuntu 9.04 (and higher)
- Needs to be Open Source (cannot be commercial)
- Needs to be able to store messages “offline”
- Needs to be able to run on TCP with minimal dependencies. It would be nice not to have a whole bunch of underlying dependencies.
- Preferably be easy to use (as a consumer) – I don’t have much time to read through loads of documentation just to get my head around the underlying object model and how to use it.
- C++ support (if it was not obvious until now)
I did a little research online and came across the following, and wanted to get some feedback:
- ActiveMQ – seems like it has good C++ support via CMS (C++ Messaging Service).
- Amazon SQS – not sure how good the C++ support is. If there is no library per se that I can use, then writing things around REST APIs might be more painful. Also I suddenly have a dependency to be able to go to the public internet. Also it is not free (though there is a free 100K messages / month).
- MQ4CPP – seems quite amateurish (kudos to the guy writing it though – seems like an interesting project to pick up when once has time).
- RabbitMQ – I know some guys used this at work (though that was using it in .NET); nothing for C++, but there some C experimental code; overall does not inspire confidence (in the context of C++).
- OpenAMQ – seems quite interesting and also has a C++ API based on its WireAPI.
- Anything else??
At face value it seems like this is down to ActiveMQ and OpenAMQ. Just looking at the quick samples between the two ActiveMQ seems like more C++ friendly and easier to use compared to OpenAMQ. Of course this is just the first impression and I could be completely wrong – it is not like I have had a chance to play with this (yet anyways).
Does anyone have any experience and feedback on this matter? Feel free to comment on this post, or tweet me.
Does something like Tibco EMS or even Tibco RV not solve your problem ? EMS is lot easier to administer than MQ….