Example usage for com.rabbitmq.client Channel basicConsume

List of usage examples for com.rabbitmq.client Channel basicConsume

Introduction

In this page you can find the example usage for com.rabbitmq.client Channel basicConsume.

Prototype

String basicConsume(String queue, boolean autoAck, String consumerTag, Consumer callback) throws IOException;

Source Link

Document

Start a non-nolocal, non-exclusive consumer.

Usage

From source file:reactor.rabbitmq.RabbitFluxTests.java

License:Open Source License

@Test
public void publishConfirms() throws Exception {
    int nbMessages = 10;
    CountDownLatch consumedLatch = new CountDownLatch(nbMessages);
    CountDownLatch confirmedLatch = new CountDownLatch(nbMessages);
    AtomicInteger counter = new AtomicInteger();
    Channel channel = connection.createChannel();
    channel.basicConsume(queue, true, (consumerTag, delivery) -> {
        counter.incrementAndGet();//w  w w .j a va2  s .  c  o  m
        consumedLatch.countDown();
    }, consumerTag -> {
    });

    Flux<OutboundMessage> msgFlux = Flux.range(0, nbMessages)
            .map(i -> new OutboundMessage("", queue, "".getBytes()));

    sender = createSender();
    sender.sendWithPublishConfirms(msgFlux).subscribe(outboundMessageResult -> {
        if (outboundMessageResult.isAck() && outboundMessageResult.getOutboundMessage() != null) {
            confirmedLatch.countDown();
        }
    });

    assertTrue(consumedLatch.await(1, TimeUnit.SECONDS));
    assertTrue(confirmedLatch.await(1, TimeUnit.SECONDS));
    assertEquals(nbMessages, counter.get());
}

From source file:reactor.rabbitmq.RabbitFluxTests.java

License:Open Source License

@Test
public void publishConfirmsBackpressure() throws Exception {
    int nbMessages = 10;
    int subscriberRequest = 3;
    CountDownLatch consumedLatch = new CountDownLatch(subscriberRequest);
    CountDownLatch confirmedLatch = new CountDownLatch(subscriberRequest);
    AtomicInteger counter = new AtomicInteger();
    Channel channel = connection.createChannel();
    channel.basicConsume(queue, true, (consumerTag, delivery) -> {
        counter.incrementAndGet();// w  w w .  ja  va  2s  . c  o  m
        consumedLatch.countDown();
    }, consumerTag -> {
    });

    Flux<OutboundMessage> msgFlux = Flux.range(0, nbMessages)
            .map(i -> new OutboundMessage("", queue, "".getBytes()));

    sender = createSender();
    sender.sendWithPublishConfirms(msgFlux).subscribe(new BaseSubscriber<OutboundMessageResult>() {
        @Override
        protected void hookOnSubscribe(Subscription subscription) {
            subscription.request(subscriberRequest);
        }

        @Override
        protected void hookOnNext(OutboundMessageResult outboundMessageResult) {
            if (outboundMessageResult.getOutboundMessage() != null) {
                confirmedLatch.countDown();
            }
        }
    });

    assertTrue(consumedLatch.await(1, TimeUnit.SECONDS));
    assertTrue(confirmedLatch.await(1, TimeUnit.SECONDS));
    assertEquals(subscriberRequest, counter.get());
}

From source file:reactor.rabbitmq.RabbitFluxTests.java

License:Open Source License

private Flux<Delivery> consume(final String queue, int nbMessages, Duration timeout) throws Exception {
    Channel channel = connection.createChannel();
    Flux<Delivery> consumeFlux = Flux
            .create(emitter -> Mono.just(nbMessages).map(AtomicInteger::new).subscribe(countdown -> {
                DeliverCallback deliverCallback = (consumerTag, message) -> {
                    emitter.next(message);
                    if (countdown.decrementAndGet() <= 0) {
                        emitter.complete();
                    }//from w  w  w .  j av  a 2s .  c  o m
                };
                CancelCallback cancelCallback = consumerTag -> {
                };
                try {
                    channel.basicConsume(queue, true, deliverCallback, cancelCallback);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }));
    return consumeFlux.timeout(timeout);
}