MQS (Minimalist Queue Services) is a minimalist queueing system in Free Software. The main purpose is to provide a set of basic methods in order to offer asynchronous messaging for program/application. Applications can use this type of services in order to store and retrieve message to dedicated queue in the queue services. This permits to avoid direct connection between applications and provides a simple asynchronous communication system. The MQS Daemon provides a simple set of XML-RPC methods for pushing and getting messages in a specific queue (so you can use the system with any application that can talk XML-RPC). The storing of the queue is in a database (e.g. MySQL, Postgresql...) or in dedicated file(s) (e.g. QDBM). QDBM is the preferred storage.
The project is at the early stages but plans to provide a basic, reliable and easy to use queueing services.
Don't hesitate to contact me (adulau-@-foo.be) if you want to add services, fix or make comments on MQS.
You can also read the Changelog .
The software requires Perl and some various Perl modules (e.g. XML::RPC) and a database with a Perl DBI/DBD Interface (or QDBM with the QDBM Perl interface).
The usage of QDBM is recommended, it's faster than the SQL database as a queue backend.
A simple example in Perl using MQS (you can use any XML-RPC Client) that uses the queue called 'test' (we assume an anonymous access to the MQS server):
use RPC::XML::Client; use Data::Dumper; print "Submit message...\n"; for my $i (1 .. 10) { my $message = "A small message number ".$i; my $req = RPC::XML::request->new('mqs.SubmitMessage', 'auth:simple:test:testkey', $message, 'test', '', '-1'); my $res = $client->send_request($req); my $returnvalue = $res->value; print Dumper(\$returnvalue); } print "Get from queue test....\n"; for my $i (1 .. 2) { my $req = RPC::XML::request->new('mqs.GetMessage', 'auth:simple:test:testkey','test'); my $res = $client->send_request($req); my $message = $res->value; print Dumper(\$message); }
tar xvfz mqs-current.tar.gz cd mqs-current
mysqladmin create queue mysql queue <./sql/mqs.sql
<general> hostrpc = 127.0.0.1 portrpc = 9000 portssl = 9001 sslcert = /etc/ssl/certs/stunnel.pem path = /home/adulau/down/mqs-0.0.12 # storage = sqldatabase ### If you want to use the QDBM backend instead of a SQL database storage = QDBM storageqdbm = /home/adulau/down/mqs-0.0.12/var/db # 0 if you don't want to lost message across startup and 1 if you want to clear # message queue at each startup of the application. (depending of the application # usage) storageqdbmoverwrite = 0 # logginglevel # 0 = only stop/start of the service # 1 = + every call to the MQS daemon # 2 = + full message logging logginglevel = 1 ### below only used for the sqldatabase storage backend dbiurl = dbi:mysql:queue dbuser = adulau dbpassword = createqueue = 1 # ! Should be disable (0) if you want to enable authentication # (1) means that you can connect without authentication allowanonymousaccess = 0 </general> <queue> <test> priority = 10 getfromqueue = remove # getfromqueue = tag </test> <internal> priority = 0 getfromqueue = remove </internal> <brol33> priority = 0 getfromqueue = keep </brol33> <vqueue> priority = 0 type = virtual realQueue test internal </vqueue> </queue> # # allowCommand - default none allowed # allowQueue - default none allowed <user> <queuemanager> authtype = simple sharedkey = samplekey allowCommand DeleteMessage allowQueue * </queuemanager> <test> authtype = simple sharedkey = anotherbadsamplekey allowCommand GetMessage SubmitMessage GetMessageBulk SubmitMessageBulk allowQueue chicon test testos vqueue </test> </user>
cd ./bin/ ./mqsd-control start
For SSL, you can make a simple startssl
cd ./bin/ ./mqsd-control startssl
<general> mqsurl = http://127.0.0.1:9000/ cleanuptiming = 600 authstring = '' </general>
./mqsmanagerd-control start
./client-test.pl
Copyright (C) 2003,2004,2005 Alexandre Dulaunoy <adulau@foo.be> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
$Id: index.wiki,v 1.1 2005/04/17 16:35:31 adulau Exp adulau $