NAME
Tatsumaki::MessageQueue - Message Queue system for Tatsumaki
SYNOPSIS
To publish a message, you first create an instance of the message queue on a specific channel:
my $mq = Tatsumaki::MessageQueue->instance($channel);
$mq->publish({
type => "message", data => $your_data,
address => $self->request->address,
time => scalar Time::HiRes::gettimeofday,
});
Later, in a handler, you can poll for new messages:
my $mq = Tatsumaki::MessageQueue->instance($channel);
my $client_id = $self->request->param('client_id')
or Tatsumaki::Error::HTTP->throw(500, "'client_id' needed");
$mq->poll_once($client_id, sub { $self->write(\@_); $self->finish; });
Additionally, if you are using Multipart XmlHttpRequest (MXHR) you can use the event API, and run a callback each time a new message is published:
my $mq = Tatsumaki::MessageQueue->instance($channel);
$mq->poll($client_id, sub {
my @events = @_;
for my $event (@events) {
$self->stream_write($event);
}
});
DESCRIPTION
Tatsumaki::MessageQueue is a simple message queue, storing all messages in memory, and keeping track of a configurable backlog. All polling requests are made with a $client_id
, and the message queue keeps track of a buffer per client, to ensure proper message delivery.
CONFIGURATION
- BacklogLength
-
To configure the number of messages in the backlog, set
$Tatsumaki::MessageQueue::BacklogLength
. By default, this is set to 30.
METHODS
publish
This method publishes a message into the message queue, for immediate consumption by all polling clients.
poll($client_id, $code_ref)
This is the event-driven poll mechanism, which accepts a callback as the second parameter. It will stream messages to the code ref passed in.
poll_once($client_id, $code_ref)
This method returns all messages since the last poll to the code reference passed as the second parameter.
AUTHOR
Tatsuhiko Miyagawa