Amazon-SQS-Client
view release on metacpan or search on metacpan
lib/Amazon/SQS/QueueHandler.pm view on Meta::CPAN
$self->get_logger->info( Dumper( [ message => $message ] ) );
return $TRUE;
}
########################################################################
sub get_next_message {
########################################################################
my ($self) = @_;
$self->set_message(undef);
my $service = $self->get_service;
my $request = $self->get_request;
my $response = $service->receiveMessage($request);
return
if !$response || !$response->isSetReceiveMessageResult();
my $receiveMessageResult = $response->getReceiveMessageResult();
my $messageList = $receiveMessageResult->getMessage();
my ($message) = @{ $messageList // [] };
return
if !ref $message || !$message->isSetMessageId();
$self->set_raw_message($message);
$self->set_receipt_handle( $message->getReceiptHandle );
$self->set_message_body( $message->getBody() );
$self->set_message_id( $message->getMessageId() );
my $decoded_message = $self->decode_message();
$self->set_message($decoded_message);
return $decoded_message;
}
########################################################################
sub create_request {
########################################################################
my ($self) = @_;
return $self->get_request
if $self->get_request;
my $max_messages = max( 1, $self->get_max_messages ); # max of 1 currently
my $wait_time = $self->get_wait_time // 0;
my $visibility_timeout = $self->get_visibility_timeout;
my $request = Amazon::SQS::Model::ReceiveMessageRequest->new(
{ QueueUrl => $self->get_url,
MaxNumberOfMessages => $max_messages,
VisibilityTimeout => $visibility_timeout,
WaitTimeSeconds => $wait_time,
}
);
$self->set_request($request);
return;
}
########################################################################
sub change_message_visibility {
########################################################################
my ( $self, $timeout ) = @_;
my $service = $self->get_service;
$service->changeMessageVisibility(
QueueUrl => $self->get_url,
ReceiptHandle => $self->get_receipt_handle,
VisibilityTimeout => $timeout,
);
return;
}
########################################################################
sub delete_message {
########################################################################
my ( $self, $handle ) = @_;
$handle //= $self->get_receipt_handle;
my $logger = $self->get_logger;
my $rsp = eval {
$self->get_service->deleteMessage(
Amazon::SQS::Model::DeleteMessageRequest->new(
{ QueueUrl => $self->get_url,
ReceiptHandle => $handle
}
)
);
};
my $err = $EVAL_ERROR;
return
if $rsp && !$EVAL_ERROR;
die $err
if !ref $err || ref $err ne 'Amazon::SQS::Exception';
my $err_message = <<'END_OF_ERROR';
Exception: %s
Response Status Code: %s
Error Code: %s
Error Type: %s
Request ID: %s
END_OF_ERROR
die sprintf $err_message,
$err->getMessage,
$err->getStatusCode,
$err->getErrorCode,
$err->getErrorType,
$err->getRequestId;
return;
}
1;
__END__
=pod
=head1 NAME
Amazon::SQS::QueueHandler - base class for creating SQS message queue handlers
( run in 0.551 second using v1.01-cache-2.11-cpan-39bf76dae61 )