[libanyevent-rabbitmq-perl] 73/151: Implement the reject method.

Damyan Ivanov dmn at moszumanska.debian.org
Thu Jan 16 11:03:05 UTC 2014


This is an automated email from the git hooks/post-receive script.

dmn pushed a commit to annotated tag debian/1.12-1
in repository libanyevent-rabbitmq-perl.

commit e97cab52c19015b0cce7155729c523e44b48d450
Author: Johannes Plunien <johannes.plunien at xing.com>
Date:   Thu Mar 10 09:30:37 2011 +0100

    Implement the reject method.
---
 lib/AnyEvent/RabbitMQ/Channel.pm | 18 ++++++++++++++++++
 lib/Net/RabbitFoot/Channel.pm    |  2 +-
 xt/04_anyevent.t                 | 36 +++++++++++++++++++++++++++++++++++-
 3 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/lib/AnyEvent/RabbitMQ/Channel.pm b/lib/AnyEvent/RabbitMQ/Channel.pm
index 4711622..262d6f5 100644
--- a/lib/AnyEvent/RabbitMQ/Channel.pm
+++ b/lib/AnyEvent/RabbitMQ/Channel.pm
@@ -508,6 +508,24 @@ sub recover {
     return $self;
 }
 
+sub reject {
+    my $self = shift;
+    my %args = @_;
+
+    return $self if !$self->_check_open( sub { } );
+
+    $self->{connection}->_push_write(
+        Net::AMQP::Protocol::Basic::Reject->new(
+            delivery_tag => 0,
+            requeue      => 0,
+            %args,
+        ),
+        $self->{id},
+    );
+
+    return $self;
+}
+
 sub select_tx {
     my $self = shift;
     my ($cb, $failure_cb,) = $self->_delete_cbs(@_);
diff --git a/lib/Net/RabbitFoot/Channel.pm b/lib/Net/RabbitFoot/Channel.pm
index a2dea7b..6c00e32 100644
--- a/lib/Net/RabbitFoot/Channel.pm
+++ b/lib/Net/RabbitFoot/Channel.pm
@@ -34,7 +34,7 @@ BEGIN {
         };
     }
 
-    for my $method (qw(publish ack recover)) {
+    for my $method (qw(publish ack recover reject)) {
         no strict 'refs';
         *{__PACKAGE__ . '::' . $method} = sub {
             my $self = shift;
diff --git a/xt/04_anyevent.t b/xt/04_anyevent.t
index f83fde0..96ce051 100644
--- a/xt/04_anyevent.t
+++ b/xt/04_anyevent.t
@@ -25,7 +25,7 @@ eval {
 
 plan skip_all => 'Connection failure: '
                . $conf->{host} . ':' . $conf->{port} if $@;
-plan tests => 24;
+plan tests => 25;
 
 use Net::RabbitFoot ();
 use AnyEvent::RabbitMQ;
@@ -278,6 +278,40 @@ $done->recv;
 pass('recover');
 
 $done = AnyEvent->condvar;
+my $reject_count = 0;
+$ch->consume(
+    queue      => 'test_q',
+    no_ack     => 0,
+    on_consume => sub {
+        my $response = shift;
+
+        if ( 5 > ++$reject_count ) {
+            $ch->reject(
+                delivery_tag => $response->{deliver}->method_frame->delivery_tag,
+
+                # requeue! Else the server does not deliver the message again to this client.
+                requeue => 1,
+            );
+            return;
+        }
+
+        $ch->ack( delivery_tag => $response->{deliver}->method_frame->delivery_tag );
+
+        $ch->cancel(
+            consumer_tag => $response->{deliver}->method_frame->consumer_tag,
+            on_success   => sub {
+                $done->send;
+            },
+            on_failure => failure_cb($done),
+        );
+    },
+    on_failure => failure_cb($done),
+);
+publish( $ch, 'RabbitMQ is powerful.', $done, );
+$done->recv;
+pass('reject');
+
+$done = AnyEvent->condvar;
 $ch->select_tx(
     on_success => sub {
         pass('select tx');

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libanyevent-rabbitmq-perl.git



More information about the Pkg-perl-cvs-commits mailing list