The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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

SEE ALSO

Tatsumaki