NAME AtomMQ - An atompub server that supports the message queue/bus model. VERSION version 0.0101 SYNOPSIS #!/usr/bin/perl use AtomMQ; my $dsn = 'dbi:SQLite:dbname=foo.db'; my $server = AtomMQ->new(feed => 'MyCoolFeed', dsn => $dsn); $server->run; DESCRIPTION AtomMQ is an atompub server that supports the message queue/bus model. Throughout this document, I will use the term message when refering to an atom feed entry, since the point of this module is to use atompub for messaging. AtomMQ extends Inoue's Atompub::Server which extends Miyagawa's XML::Atom::Server. Can you feel the love already? To get started, just copy the code from the to a file and drop it into the cgi-bin folder on your web server, and you will have a shiny new atompub server with a feed titled MyCoolFeed. It can also be run via mod_perl on apache. To create more feeds, just copy that file and change 'MyCoolFeed' to 'MyOtherFeed'. To publish a message to AtomMQ, make a HTTP POST request: $ curl -d ' allo
an important message
' http://localhost/cgi-bin/mycoolfeed Where mycoolfeed is the name of the file you created in cgi-bin. So how is this different than a regular atompub server? Just one simple thing. A concept of lastid. So if you just do: $ curl http://localhost/cgi-bin/mycoolfeed you will get all messages since the feed was created. But lets say you are running a client that polls the feed and processes messages. If this client dies, you will not want it to process all the messages again. So clients are responsible for maintaining and persisting the id of the last message they processed. This allows a client to request only messages that came after the message with the given id. They can do this by passing a Xlastid header: $ curl -H 'Xlastid: 42' http://localhost/cgi-bin/mycoolfeed That will return only messages that came after the message that had id 42. METHODS new Arguments: $feed, $dsn, $user, $password This is the AtomMQ constructor. The required arguments are $feed and $dsn. $feed is the name of the feed. $dsn should be a valid DBI dsn and point to a database which you have write privileges to. $user and $password are optional and should be used if your databases requires them. See for more info. my $server = AtomMQ->new(feed => 'MyCoolFeed', dsn => $dsn); run Arguments: None Call this method to start the server. DATABASE AtomMQ depends on a database to store its data. The dsn you pass to the constructor must point to a database which you have write privileges to. Only one table named atommq_entry is required. This table will be created automagically for you if it doesn't already exist. If you want to create it yourself, see AtomMQ::Schema::Result::AtomMQEntry for the schema. All databases supported by DBIx::Class are supported, which are most major databases including postgresql, sqlite and mysql. MOTIVATION Why did I create this module? I am a big fan of messaging systems and make heavy use of them to easily create scalable systems. A traditional message broker is great for creating message queues. But once a consumer reads a message off of a queue, it is gone. I needed a system to publish events such that multiple heterogeneous services could subscribe to them. So I really needed a message bus, not a message queue. I know for example I could have used something called topics in ActiveMQ, but they are extremely flakey in my experience. Actually, I have found ActiveMQ to be broken in general. An instance I manage has to be restarted at least twice a week. AtomMQ on the other hand will be extremely stable, because it is so simple. It is just a view into a database table. As long as your database and web server are up, AtomMQ will be there for you. It will not let you down. And there are all sorts of ways to add redundency to databases and web heads. Another advantage of using an atompub server is that atompub is an rfc standard. Everyone already has a client for it, their browser. Aren't standards are great! By the way, if you just need message queues try POE::Component::MessageQueue. It rocks. If you need a message bus, give AtomMQ a shot. AUTHOR Naveed Massjouni COPYRIGHT AND LICENSE This software is copyright (c) 2010 by Naveed Massjouni. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.