NAME
Net::MessageBus - Pure Perl simple message bus
VERSION
Version 0.07
SYNOPSIS
This module implements the client side of the Message Bus.
use Net::MessageBus;
my $MessageBus = Net::MessageBus->new(
server => '127.0.0.1',
group => 'backend',
sender => 'machine1',
username => 'user',
password => 'password',
logger => $logger_object,
block => 0,
timeout => 0.01
);
On initialization the client authenticates with the Net::MessageBus::Server after which it can start pushing messages to the bus.
In order to receive any messages from the bus the client must subscribe to :
one or more groups
one or more senders
all messages
#each can be called multiple times
$MessageBus->subscribe(group => 'test');
$MessageBus->subscribe(sender => 'test_process_1');
or
$MessageBus->subscribe_to_all();
The client can unsubscribe at any time by calling the unsubscribe
method
$MessageBus->unsubscribe();
To retrive the messages received from the bus, the client can call one of this methods :
my @messages = $MessageBus->pending_messages();
or
my $message = $MessageBus->next_message();
EXAMPLE
use Net::MessageBus;
my $MessageBus = Net::MessageBus->new(server => '127.0.0.1',
group => 'backend',
sender => 'machine1');
$MessageBus->subscribe_to_all();
or
$MessageBus->subscribe(group => 'test');
$MessageBus->subscribe(sender => 'test_process_1');
...
my @messages = $MessageBus->pending_messages();
or
while (my $message = $MessageBus->next_message()) {
print $message->type();
}
SUBROUTINES/METHODS
new
Creates a new New::MessageBus object
Arguments
server = The ip address of the server
port = The port on which the server is listening for connections
group = The group to which this client belogs to
sender = A name for the current client
username = User name that will be sent to the server for authentication
password = The password that will be sent to the server for authentication
logger = A object on which we can call the fallowing methods
debug,info,warn,error
block = Sets the read timout to 0 which means that the if we don't have any unread messages from the server we will wait until the server sends something. If block is true timeout will be ignored.
timeout = the maximum ammount of time we should wait for a message from the server before returning
undef
fornext_message()
or an empty list forpending_messages()
Example
my $MessageBus = Net::MessageBus->new(
server => '127.0.0.1',
group => 'backend',
sender => 'machine1',
username => 'user',
password => 'password',
logger => $logger_object,
);
subscribe
Subscribes the current Net::MessageBus client to the messages from the specified category. It can be called multiple times
Example :
$MessageBus->subscribe(group => 'test');
or
$MessageBus->subscribe(sender => 'test_process_1');
subscribe_all
Subscribes the current Net::MessageBus client to all the messages the server receives
Example :
$MessageBus->subscribe_all;
unsubscribe
Unsubscribes current Net::MessageBus client from all the messages it previously subscribed to
Example :
$MessageBus->unsubscribe();
send
Send a new messge to the message queue. It has two forms in which it can be called :
- 1. With a Net::MessageBus::Message object as argument
- 2. With a hash ref containing the fallowing two keys :
type = The message type
payload = The actual information we want to send with the message. It can be a scalar, array ref or hash ref and it cannot contain any objects
Example :
$MessageBus->send( $message ); #message must be a Net::MessageBus::Message object
or
$MessageBus->send( type => 'alert', payload => { a => 1, b => 2 } );
next_message
Returns the next message from the queue of messages we received from the server. The message is a Net::MessageBus::Message object.
pending_messages
Returns all the messages received until now from the server. Each message is a Net::MessageBus::Message object.
Argumens :
force_read_queue = forces a read of everyting the server might have sent and we have't processed yet
Note: Forcing a read of the message queue when block mode is on will block the call until we received something from the server
blocking
Getter/Setter for the blocking setting of the client. If set to true, when waiting for server messages, the client will block until it receives something
Examples : my $blocking = $MessageBus->blocking(); or $MessageBus->blocking(1);
timeout
Getter/Setter for the timeout when waiting for server messages. It can have subunitary value (eg. 0.01).
Note1 : When blocking is set to a true value, the timeout is ignored Note2 : When timeout is set to 0 the effect is the same as setting blocking to a true value.
Example : my $timeout = $MessageBus->timeout(); or $MessageBus->timeout(0.01);
Private methods
This methods are for internal use and should not be called manually
connect_to_server
Creates a connection to the Net::MessageBus server and authenticates the user
send_to_server
Handles the actual comunication with the server
authenticate
Sends a authenication request to the server and waits for the response
get_response
Returns the response received from the server for the last request
read_server_messages
Reads all the messages received from the server and adds the to the internal message queue
SEE ALSO
Check out Net::MessageBus::Server which implements the server of the MessageBus and Net::MessageBus::Message which is the OO inteface for the messages passwed between the client and the server
AUTHOR
Horea Gligan, <gliganh at gmail.com>
BUGS
Please report any bugs or feature requests to bug-net-MessageBus at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net-MessageBus. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Net::MessageBus
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
Thanks to Manol Roujinov for helping to improve this module
LICENSE AND COPYRIGHT
Copyright 2012 Horea Gligan.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.