use List::MoreUtils qw/ uniq /;
use HTTP::Request;
use Net::Stomp;
+use MooseX::Types::Moose qw/Str Int HashRef/;
use namespace::autoclean;
extends 'Catalyst::Engine::Embeddable';
-our $VERSION = '0.05';
+our $VERSION = '0.06';
has connection => (is => 'rw', isa => 'Net::Stomp');
-has conn_desc => (is => 'rw', isa => 'Str');
+has conn_desc => (is => 'rw', isa => Str);
=head1 NAME
require Catalyst::Engine::Stomp;
}
- MyApp->config->{Engine::Stomp} =
- {
- hostname => '127.0.0.1',
- port => 61613,
- };
+ MyApp->config(
+ 'Engine::Stomp' = {
+ hostname => '127.0.0.1',
+ port => 61613,
+ subscribe_header => {
+ transformation => 'jms-to-json',
+ }
+ },
+ );
MyApp->run();
# In a controller, or controller base class:
die 'No Engine::Stomp configuration found'
unless ref $app->config->{'Engine::Stomp'} eq 'HASH';
- # list the path namespaces that will be mapped as queues.
- #
- # this is known to use the deprecated
- # Dispatcher->action_hash() method, but there doesn't appear
- # to be another way to get the relevant strings out.
- #
- # http://github.com/rafl/catalyst-runtime/commit/5de163f4963d9dbb41d7311ca6f17314091b7af3#L2R644
- #
- my @queues =
- uniq
- grep { length $_ }
- map { $_->namespace }
- values %{$app->dispatcher->action_hash};
+ my @queues = grep { length $_ }
+ map { $app->controller($_)->action_namespace } $app->controllers;
# connect up
my %template = %{$app->config->{'Engine::Stomp'}};
+ my $subscribe_headers = $template{subscribe_headers} || {};
+ die("subscribe_headers config for Engine::Stomp must be a hashref!\n")
+ if (ref($subscribe_headers) ne 'HASH');
+
$self->connection(Net::Stomp->new(\%template));
$self->connection->connect();
$self->conn_desc($template{hostname}.':'.$template{port});
foreach my $queue (@queues) {
my $queue_name = "/queue/$queue";
$self->connection->subscribe({
- destination => $queue_name,
- ack => 'client'
- });
+ %$subscribe_headers,
+ destination => $queue_name,
+ ack => 'client',
+ });
}
# enter loop...
# ack the message off the queue now we've replied / processed
$self->connection->ack( { frame => $frame } );
}
-
=head2 handle_stomp_error
Log any Stomp error frames we receive.
__PACKAGE__->meta->make_immutable;
+=head1 CONFIGURATION
+
+=head2 subscribe_header
+
+Add additional header key/value pairs to the subscribe message sent to the
+message broker.
+
+=cut
+
+=head1 DEVELOPMENT
+
+The source to Catalyst::Engine::Stomp is in github:
+
+ http://github.com/chrisa/catalyst-engine-stomp
+
+=head1 AUTHOR
+
+Chris Andrews C<< <chris@nodnol.org> >>
+
+=head1 CONTRIBUTORS
+
+Tomas Doran (t0m) C<< <bobtfish@bobtfish.net> >>
+
+Jason Tang
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright (C) 2009 Venda Ltd
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.8.8 or,
+at your option, any later version of Perl 5 you may have available.
+
+=cut
+