Amazon-SQS-ProducerConsumer
view release on metacpan or search on metacpan
lib/Amazon/SQS/Consumer.pm view on Meta::CPAN
package Amazon::SQS::Consumer;
use 5.006;
use strict;
use warnings;
use base 'Amazon::SQS::ProducerConsumer::Base';
use JSON::XS;
use Encode qw( encode_utf8 is_utf8 );
use constant {
DEFAULT_N_MESSAGES => 10,
DEFAULT_WAIT_SECONDS => 30,
SECONDS_BETWEEN_TRIES => 10
};
=head1 NAME
Amazon::SQS::Consumer - Receive messages from an Amazon Simple Queue Service (SQS) queue
lib/Amazon/SQS/Consumer.pm view on Meta::CPAN
MaxNumberOfMessages => $me->{n_messages},
defined $me->{timeout} ? ( VisibilityTimeout => $me->{timeout} ) : ()
) unless defined $me->{messages} && @{$me->{messages}} or $me->{no_loop};
# If there's a message in the cache, return it
if ( my $message = shift @{$me->{messages}} ) {
$me->{DeleteMessageHandle} = $message->{ReceiptHandle};
my $object;
eval {
my $body = $message->{Body};
$body = encode_utf8( $body ) if is_utf8( $body );
$object = decode_json $body;
};
if ( $@ ) {
say "left bad message in queue; could not decode JSON from $message->{Body}: $@";
} else {
return $object;
}
} elsif ( $me->{no_loop} ) {
$seconds_to_wait = 0;
} else {
lib/Amazon/SQS/ProducerConsumer/Base.pm view on Meta::CPAN
package Amazon::SQS::ProducerConsumer::Base;
use 5.006;
use strict;
use warnings;
use XML::Simple;
use LWP::UserAgent;
use Digest::HMAC_SHA1;
use URI::Escape qw(uri_escape_utf8);
use MIME::Base64 qw(encode_base64);
=head1 NAME
Amazon::SQS::ProducerConsumer::Base - Perl interface to the Amazon Simple Queue Service (SQS) environment
=head1 VERSION
Version 0.04
lib/Amazon/SQS/ProducerConsumer/Base.pm view on Meta::CPAN
$args{AWSAccessKeyId} = $me->{AWSAccessKeyId};
$args{SignatureVersion} = $me->{signature_version};
$args{SignatureMethod} = 'HmacSHA1';
$args{Version} = $me->{version};
$args{Timestamp} = sprintf "%04d-%02d-%02dT%02d:%02d:%02dZ", $t[5]+1900, $t[4]+1, @t[3,2,1,0];
$args{MaxNumberOfMessages} = delete $args{NumberOfMessages} if $args{NumberOfMessages};
my @params;
for ( sort keys %args ) {
push @params, join '=', $_, uri_escape_utf8( $args{$_}, "^A-Za-z0-9\-_.~" );
}
$me->{resource_path} =~ s|http://$me->{host}/||;
my $string_to_sign = join( "\n",
'POST', $me->{host}, $me->{resource_path}, join( '&', @params )
);
$me->debug("QUERY TO SIGN: $string_to_sign");
my $hashed = Digest::HMAC_SHA1->new( $me->{SecretAccessKey} );
( run in 0.233 second using v1.01-cache-2.11-cpan-a5abf4f5562 )