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

NAME

Beekeeper::Bus::STOMP - A lightweight asynchronous STOMP 1.1 / 1.2 client.

VERSION

Version 0.01

SYNOPSIS

  my $stomp = Beekeeper::STOMP->new(
      host  => 'localhost',
      user  => 'guest',
      pass  => 'guest',
      vhost => '/',
  );
  
  $stomp->connect( blocking => 1 );
   
  $stomp->send(
      destination => '/topic/foo',
      body        => 'Hello',
  );
  
  $stomp->subscribe(
      destination => '/topic/foo',
      on_receive_msg => sub {
          my ($body, $headers) = @_;
          print "Got message: $$body";
      },
  );
  
  $stomp->disconnect( blocking => 1 );

Most methods allows to send arbitrary headers along with commands.

Except for trivial cases, error checking is delegated to the server.

The STOMP specification can be found at http://stomp.github.com/

TODO

- Send heartbeats

CONSTRUCTOR

new ( %options )

host

Hostname or IP address of the STOMP server. It also accepts an array of adresses which conforms a cluster, in which case the connection will be stablished against a randomly choosen node of the cluster.

port

Port of the STOMP server. If not specified use the STOMP default of 61613.

tls

Enable the use of TLS for STOMP connections.

vhost

Virtual host of the STOMP server to connect to.

user

Username used to authenticate against the server.

pass

Password used to authenticate against the server.

timeout

Connection timeout in fractional seconds before giving up. Default is 30 seconds. If set to zero the connection to server it retried forever.

on_connect => $cb->( \%headers )

Optional user defined callback which is called after a connection is completed.

on_error => $cb->( $errmsg )

Optional user defined callback which is called when an error condition occurs. If not specified, the deafult is to die with $errmsg. As STOMP protocol doesn't allow errors, the connection was already closed when this is called.

METHODS

connect ( %options )

Connect to the STOMP server and do handshake. On failure retries until timeout.

blocking

When set to true this method acts as a blocking call: it does not return until a connection has been established and handshake has been completed.

disconnect ( %options )

A client can disconnect from the server at anytime by closing the socket but there is no guarantee that the previously sent frames have been received by the server. This method should be called to do a graceful shutdown, where the client is assured that all previous frames have been received by the server.

blocking

When set to true this method acts as a blocking call: it does not return until disconnection has been completed.

on_success => $cb->()

Optional user defined callback which is called after disconnection is completed.

subscribe ( %headers )

Create a subscription to a given destination. When a message is received, it will be passed to given on_receive_msg callback. Example:

  $stomp->subscribe(
      destination => '/topic/foo',
      on_receive_msg => sub {
          my ($body, \$headers) = @_;
          print "Got message from /topic/foo : $$body";
      },
  );
  

Any arbitrary header may be specified, and will be passed to the server.

destination

The subscription requires the destination to which the client wants to subscribe, usually in the form of '/topic/name' or '/queue/name'.

id

An id is necessary to uniquely identify the subscription within the STOMP session. Since a single connection can have multiple open subscriptions with a server, this id allows the client and server to relate subsequent unsubscribe() or ack().

If not specified, an unique id is automatically generated.

ack

The valid values for the ack are 'auto', 'client', or 'client-individual'. If not specified the server will default to 'auto', which means that received messages doesn't require client acknowledgment.

on_success => $cb->()

Optional user defined callback which is called after subscription is completed.

on_receive_msg => $cb->( \$msg_body, \%msg_headers )

Required user defined callback which is called when a message is received.

unsubscribe ( %headers )

Cancel an existing subscription, connection will no longer receive messages from that destination. Example:

  $stomp->unsubscribe( destination => '/topic/foo' );
  

At least one of destination or a subscription id is required.

destination

The destination of an existing subscription.

id

The id of an existing subscription.

on_success => $cb->()

Optional user defined callback which is called after unsubscription is completed.

send ( %headers )

Sends a message to a destination in the messaging system. Example:

  $stomp->send(
      destination => '/topic/foo',
      body        => 'Hello!',
  );

Any arbitrary header may be specified, and will be passed to the server.

destination

Mandatory header which indicates where to send the message.

body

Scalar or scalar reference containing a binary blob which conforms the body of the message. May be omitted.

on_success => $cb->()

Optional user defined callback which is called after message was received by the server.

ack ( %headers )

Used to acknowledge consumption of a message from a subscription using 'client' or 'client-individual' acknowledgment. Any messages received from such a subscription will not be considered to have been consumed until the message has been acknowledged via an ack() or nack().

Any arbitrary header may be specified, and will be passed to the server.

id

STOMP 1.2 requires this header. It must contain the value of the ack header of the message being acknowledged.

message-id

STOMP 1.1 requires this header. It must contain containing the value of the message-id header of the message being acknowledged.

subscription

STOMP 1.1 requires this header. It must contain containing the value of the subscription header of the message being acknowledged.

nack ( %headers )

nack() is the opposite of ack(). It is used to tell the server that the client did not consume the message. The server can then either send the message to a different client or discard it. The exact behavior is server specific.

flush_buffer

Send several messages into a single socket write. This is more efficient than individual send() calls because nagle's algorithm is disabled.

discard_buffer

begin ( %headers )

Used to start a transaction. Transactions in this case apply to sending and acknowledging: any messages sent or acknowledged during a transaction will be handled atomically based on the transaction.

transaction

Required transaction identifier which will be used for send, commit, abort, ack, and nack frames to bind them to a given transaction.

commit ( %headers )

Used to commit a transaction in progress.

transaction

The transaction id is required and identifies the transaction to commit.

abort ( %headers )

Used to roll back a transaction in progress.

transaction

The transaction id is required and identifies the transaction to abort.

AUTHOR

José Micó, jose.mico@gmail.com

COPYRIGHT AND LICENSE

Copyright 2015 José Micó.

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

This software is distributed in the hope that it will be useful, but it is provided “as is” and without any express or implied warranties. For details, see the full text of the license in the file LICENSE.