Tatsumaki::MessageQueue - Message Queue system for Tatsumaki
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);
}
});
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.
- BacklogLength
- To configure the number of messages in the backlog, set
$Tatsumaki::MessageQueue::BacklogLength. By
default, this is set to 30.
This method publishes a message into the message queue, for immediate
consumption by all polling clients.
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.
This method returns all messages since the last poll to the code reference
passed as the second parameter.