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.