X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FEngine%2FStomp.pm;h=89281a147b6e4ace35303c0b25f1d535787ff0a6;hb=a58d0da647f09395c6b764446251d093c0f5116d;hp=218702eb971a8a303acaef7531d0ca9302a41fde;hpb=f20933b743e8dc0972a5a6ead225c81e4b42809c;p=catagits%2FCatalyst-Engine-STOMP.git diff --git a/lib/Catalyst/Engine/Stomp.pm b/lib/Catalyst/Engine/Stomp.pm index 218702e..89281a1 100644 --- a/lib/Catalyst/Engine/Stomp.pm +++ b/lib/Catalyst/Engine/Stomp.pm @@ -3,6 +3,7 @@ use Moose; 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'; @@ -10,7 +11,7 @@ extends 'Catalyst::Engine::Embeddable'; 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 @@ -25,11 +26,15 @@ Catalyst::Engine::Stomp - write message handling apps with Catalyst. 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: @@ -77,6 +82,10 @@ sub run { # connect up my %template = %{$app->config->{'Engine::Stomp'}}; + my $add_header = delete $template{subscribe_header}; + if (ref($add_header) ne 'HASH') { + $add_header = undef; + } $self->connection(Net::Stomp->new(\%template)); $self->connection->connect(); $self->conn_desc($template{hostname}.':'.$template{port}); @@ -84,10 +93,20 @@ sub run { # subscribe, with client ack. foreach my $queue (@queues) { my $queue_name = "/queue/$queue"; - $self->connection->subscribe({ - destination => $queue_name, - ack => 'client' - }); + my $header_hash = { + destination => $queue_name, + ack => 'client', + }; + + # add the additional headers - yes I know it overwrites but + # thats the dev's problem? + if (keys %{$add_header}) { + foreach my $key (keys %{$add_header}) { + $header_hash->{$key} = $add_header->{$key}; + } + } + + $self->connection->subscribe($header_hash); } # enter loop... @@ -183,7 +202,6 @@ sub handle_stomp_message { # 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. @@ -199,3 +217,11 @@ sub handle_stomp_error { __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