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

NAME

Net::RabbitMQ::Channel - use rabbitmq, OOP style

SYNOPSIS

        use Net::RabbitMQ::Channel;

        my $channel = Net::RabbitMQ::Channel->new (1, {
                hosts => {
                        rabbit1 => {user => 'guest', pass => 'guest'},
                        rabbit2 => {user => 'guest', pass => 'guest'}
                }
        });

        my $exchange = $channel->exchange_declare (
                'test.x', 
                exchange_type => "topic",
        );

        my $publisher_key = 'test.*';

        # consumer part
        my $queue = $channel->queue_declare (
                'test.q',
                exclusive => 0,
        );

        $queue->bind ($exchange, $publisher_key);

        # publisher part
        $exchange->publish ($publisher_key, $message,
                app_id => 'test',
                timestamp => time
        );
        
        # consumer part
        my $message = $queue->get;

METHODS

init

new
        my $channel = Net::RabbitMQ::Channel->new (1, {
                # mandatory
                hosts => {host_name => {user => 'user_name', pass => 'password'}},
                # optional
        });

when creating Net::RabbitMQ::Channel you must provide channel number and configuration options.

in the current version only 'hosts' key is supported. each key for 'hosts' specifies one rabbitmq broker configuration. if current broker connection fails, module tries to reconnect to another one.

working with channel

exchange_declare

declares exchange

        my $exchange = $self->exchange_declare (
                'test.exchange',
                package => 'My::Exchange', # Net::RabbitMQ::Exchange if omitted
                passive => 0,              # 0
                durable => 1,              # 1
                auto_delete => 0,          # 0
                exchange_type => "topic"
        );
queue_declare

declares queue

        my $queue = $self->queue_declare (
                'test.queue',
                package => 'My::Queue', # Net::RabbitMQ::Queue if omitted
                passive => 0,           # 0
                durable => 1,           # 1
                auto_delete => 0,       # 0
                exclusive => 0
        );
publish

publish message to routing key

a typical workflow for a producer role is: open channel, declare exchange, and publish message via routing key

please, note: queue for recieving that message must be declared and binded to exchange using routing key prior to message publishing.

        $channel->publish ($publisher_key, $message, {exchange => $exchange->name}, {
                # content_type => $string,
                # content_encoding => $string,
                # correlation_id => $string,
                # reply_to => $string,
                # expiration => $string,
                # message_id => $string,
                # type => $string,
                # user_id => $string,
                app_id => 'test',
                # delivery_mode => $integer,
                # priority => $integer,
                timestamp => time

        });
        
close

stub

AUTHOR

Ivan Baktsheev, <apla at the-singlers.us>

BUGS

Please report any bugs or feature requests to my email address, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net::RabbitMQ::Channel. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

ACKNOWLEDGEMENTS

COPYRIGHT & LICENSE

Copyright 2010-2011 Ivan Baktsheev

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.