Example usage for org.springframework.amqp.rabbit.listener DirectMessageListenerContainer stop

List of usage examples for org.springframework.amqp.rabbit.listener DirectMessageListenerContainer stop

Introduction

In this page you can find the example usage for org.springframework.amqp.rabbit.listener DirectMessageListenerContainer stop.

Prototype

@Override
public void stop() 

Source Link

Document

Stop this container.

Usage

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

@Test
public void testSimple() throws Exception {
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setThreadNamePrefix("client-");
    executor.afterPropertiesSet();//  www  .  j ava2s  . co m
    cf.setExecutor(executor);
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(cf);
    container.setQueueNames(Q1, Q2);
    container.setConsumersPerQueue(2);
    container.setMessageListener(new MessageListenerAdapter((ReplyingMessageListener<String, String>) in -> {
        if ("foo".equals(in) || "bar".equals(in)) {
            return in.toUpperCase();
        } else {
            return null;
        }
    }));
    container.setBeanName("simple");
    container.setConsumerTagStrategy(new Tag());
    container.afterPropertiesSet();
    container.start();
    RabbitTemplate template = new RabbitTemplate(cf);
    assertEquals("FOO", template.convertSendAndReceive(Q1, "foo"));
    assertEquals("BAR", template.convertSendAndReceive(Q2, "bar"));
    container.stop();
    assertTrue(consumersOnQueue(Q1, 0));
    assertTrue(consumersOnQueue(Q2, 0));
    assertTrue(activeConsumerCount(container, 0));
    assertEquals(0, TestUtils.getPropertyValue(container, "consumersByQueue", MultiValueMap.class).size());
    template.stop();
    cf.destroy();
}

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

@Test
public void testAdvice() throws Exception {
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(cf);
    container.setQueueNames(Q1, Q2);/*from  w  ww. j  a  v a 2s.com*/
    container.setConsumersPerQueue(2);
    final CountDownLatch latch = new CountDownLatch(2);
    container.setMessageListener(m -> latch.countDown());
    final CountDownLatch adviceLatch = new CountDownLatch(2);
    MethodInterceptor advice = i -> {
        adviceLatch.countDown();
        return i.proceed();
    };
    container.setAdviceChain(advice);
    container.setBeanName("advice");
    container.setConsumerTagStrategy(new Tag());
    container.afterPropertiesSet();
    container.start();
    RabbitTemplate template = new RabbitTemplate(cf);
    template.convertAndSend(Q1, "foo");
    template.convertAndSend(Q1, "bar");
    assertTrue(latch.await(10, TimeUnit.SECONDS));
    assertTrue(adviceLatch.await(10, TimeUnit.SECONDS));
    container.stop();
    assertTrue(consumersOnQueue(Q1, 0));
    assertTrue(consumersOnQueue(Q2, 0));
    assertTrue(activeConsumerCount(container, 0));
    assertEquals(0, TestUtils.getPropertyValue(container, "consumersByQueue", MultiValueMap.class).size());
    cf.destroy();
}

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

@Test
public void testQueueManagement() throws Exception {
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setThreadNamePrefix("client-");
    executor.afterPropertiesSet();//from  w  ww .j a  v a  2  s  . co m
    cf.setExecutor(executor);
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(cf);
    container.setConsumersPerQueue(2);
    container.setMessageListener(new MessageListenerAdapter((ReplyingMessageListener<String, String>) in -> {
        if ("foo".equals(in) || "bar".equals(in)) {
            return in.toUpperCase();
        } else {
            return null;
        }
    }));
    container.setBeanName("qManage");
    container.setConsumerTagStrategy(new Tag());
    container.afterPropertiesSet();
    container.start();
    container.addQueueNames(Q1, Q2);
    assertTrue(consumersOnQueue(Q1, 2));
    assertTrue(consumersOnQueue(Q2, 2));
    RabbitTemplate template = new RabbitTemplate(cf);
    assertEquals("FOO", template.convertSendAndReceive(Q1, "foo"));
    assertEquals("BAR", template.convertSendAndReceive(Q2, "bar"));
    container.removeQueueNames(Q1, Q2, "junk");
    assertTrue(consumersOnQueue(Q1, 0));
    assertTrue(consumersOnQueue(Q2, 0));
    assertTrue(activeConsumerCount(container, 0));
    container.stop();
    assertTrue(consumersOnQueue(Q1, 0));
    assertTrue(consumersOnQueue(Q2, 0));
    assertTrue(activeConsumerCount(container, 0));
    assertEquals(0, TestUtils.getPropertyValue(container, "consumersByQueue", MultiValueMap.class).size());
    template.stop();
    cf.destroy();
}

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

@Test
public void testQueueManagementQueueInstances() throws Exception {
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setThreadNamePrefix("client-");
    executor.afterPropertiesSet();//  w ww  . ja  v a2s  . c  o m
    cf.setExecutor(executor);
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(cf);
    container.setConsumersPerQueue(2);
    container.setMessageListener(new MessageListenerAdapter((ReplyingMessageListener<String, String>) in -> {
        if ("foo".equals(in) || "bar".equals(in)) {
            return in.toUpperCase();
        } else {
            return null;
        }
    }));
    container.setBeanName("qManage");
    container.setConsumerTagStrategy(new Tag());
    container.afterPropertiesSet();
    container.setQueues(new Queue(Q1));
    assertArrayEquals(new String[] { Q1 }, container.getQueueNames());
    container.start();
    container.addQueues(new Queue(Q2));
    assertTrue(consumersOnQueue(Q1, 2));
    assertTrue(consumersOnQueue(Q2, 2));
    RabbitTemplate template = new RabbitTemplate(cf);
    assertEquals("FOO", template.convertSendAndReceive(Q1, "foo"));
    assertEquals("BAR", template.convertSendAndReceive(Q2, "bar"));
    container.removeQueues(new Queue(Q1), new Queue(Q2), new Queue("junk"));
    assertTrue(consumersOnQueue(Q1, 0));
    assertTrue(consumersOnQueue(Q2, 0));
    assertTrue(activeConsumerCount(container, 0));
    container.stop();
    assertTrue(consumersOnQueue(Q1, 0));
    assertTrue(consumersOnQueue(Q2, 0));
    assertTrue(activeConsumerCount(container, 0));
    assertEquals(0, TestUtils.getPropertyValue(container, "consumersByQueue", MultiValueMap.class).size());
    template.stop();
    cf.destroy();
}

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

@Test
public void testAddRemoveConsumers() throws Exception {
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setThreadNamePrefix("client-");
    executor.afterPropertiesSet();/* w ww  .  j av  a2s .c o m*/
    cf.setExecutor(executor);
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(cf);
    container.setQueueNames(Q1, Q2);
    container.setConsumersPerQueue(2);
    container.setMessageListener(new MessageListenerAdapter((ReplyingMessageListener<String, String>) in -> {
        if ("foo".equals(in) || "bar".equals(in)) {
            return in.toUpperCase();
        } else {
            return null;
        }
    }));
    container.setBeanName("qAddRemove");
    container.setConsumerTagStrategy(new Tag());
    container.afterPropertiesSet();
    container.start();
    RabbitTemplate template = new RabbitTemplate(cf);
    assertEquals("FOO", template.convertSendAndReceive(Q1, "foo"));
    assertEquals("BAR", template.convertSendAndReceive(Q2, "bar"));
    assertTrue(consumersOnQueue(Q1, 2));
    assertTrue(consumersOnQueue(Q2, 2));
    container.setConsumersPerQueue(1);
    assertTrue(consumersOnQueue(Q1, 1));
    assertTrue(consumersOnQueue(Q2, 1));
    container.setConsumersPerQueue(2);
    assertTrue(consumersOnQueue(Q1, 2));
    assertTrue(consumersOnQueue(Q2, 2));
    container.stop();
    assertTrue(consumersOnQueue(Q1, 0));
    assertTrue(consumersOnQueue(Q2, 0));
    assertTrue(activeConsumerCount(container, 0));
    assertEquals(0, TestUtils.getPropertyValue(container, "consumersByQueue", MultiValueMap.class).size());
    template.stop();
    cf.destroy();
}

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

@Test
public void testEvents() throws Exception {
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(cf);
    container.setQueueNames(EQ1, EQ2);/*  w  w  w . j ava  2  s.  c  om*/
    final List<Long> times = new ArrayList<>();
    final CountDownLatch latch1 = new CountDownLatch(2);
    final AtomicReference<ApplicationEvent> failEvent = new AtomicReference<>();
    final CountDownLatch latch2 = new CountDownLatch(2);
    container.setApplicationEventPublisher(event -> {
        if (event instanceof ListenerContainerIdleEvent) {
            times.add(System.currentTimeMillis());
            latch1.countDown();
        } else {
            failEvent.set((ApplicationEvent) event);
            latch2.countDown();
        }
    });
    container.setMessageListener(m -> {
    });
    container.setIdleEventInterval(50L);
    container.setBeanName("events");
    container.setConsumerTagStrategy(new Tag());
    container.afterPropertiesSet();
    container.start();
    assertTrue(latch1.await(10, TimeUnit.SECONDS));
    assertThat(times.get(1) - times.get(0), greaterThanOrEqualTo(50L));
    brokerRunning.deleteQueues(EQ1, EQ2);
    assertTrue(latch2.await(10, TimeUnit.SECONDS));
    assertNotNull(failEvent.get());
    assertThat(failEvent.get(), instanceOf(ListenerContainerConsumerTerminatedEvent.class));
    container.stop();
    cf.destroy();
}

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

@Test
public void testErrorHandler() throws Exception {
    brokerRunning.deleteQueues(Q1);//  w  w  w .  j av  a 2 s .c  om
    Queue q1 = new Queue(Q1, true, false, false, new ArgumentBuilder().put("x-dead-letter-exchange", "")
            .put("x-dead-letter-routing-key", DLQ1).get());
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
    RabbitAdmin admin = new RabbitAdmin(cf);
    admin.declareQueue(q1);
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(cf);
    container.setQueueNames(Q1);
    container.setConsumersPerQueue(2);
    final AtomicReference<Channel> channel = new AtomicReference<>();
    container.setMessageListener((ChannelAwareMessageListener) (m, c) -> {
        channel.set(c);
        throw new MessageConversionException(
                "intended - should be wrapped in an AmqpRejectAndDontRequeueException");
    });
    container.setBeanName("errorHandler");
    container.setConsumerTagStrategy(new Tag());
    container.afterPropertiesSet();
    container.start();
    RabbitTemplate template = new RabbitTemplate(cf);
    template.convertAndSend(Q1, "foo");
    assertNotNull(template.receive(DLQ1, 10000));
    container.stop();
    assertTrue(consumersOnQueue(Q1, 0));
    assertTrue(consumersOnQueue(Q2, 0));
    assertTrue(activeConsumerCount(container, 0));
    assertEquals(0, TestUtils.getPropertyValue(container, "consumersByQueue", MultiValueMap.class).size());
    assertFalse(channel.get().isOpen());
    cf.destroy();
}

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

@Test
public void testRecoverBrokerLoss() throws Exception {
    ConnectionFactory mockCF = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Channel channel = mock(Channel.class);
    given(connection.isOpen()).willReturn(true);
    given(mockCF.createConnection()).willReturn(connection);
    given(connection.createChannel(false)).willReturn(channel);
    given(channel.isOpen()).willReturn(true);
    final CountDownLatch latch1 = new CountDownLatch(1);
    final CountDownLatch latch2 = new CountDownLatch(2);
    ArgumentCaptor<Consumer> consumerCaptor = ArgumentCaptor.forClass(Consumer.class);
    final String tag = "tag";
    willAnswer(i -> {/* w ww.j  a  va 2s .  c om*/
        latch1.countDown();
        latch2.countDown();
        return tag;
    }).given(channel).basicConsume(eq("foo"), anyBoolean(), anyString(), anyBoolean(), anyBoolean(), anyMap(),
            consumerCaptor.capture());
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(mockCF);
    container.setQueueNames("foo");
    container.setBeanName("brokerLost");
    container.setConsumerTagStrategy(q -> "tag");
    container.setShutdownTimeout(1);
    container.setMonitorInterval(200);
    container.setFailedDeclarationRetryInterval(200);
    container.afterPropertiesSet();
    container.start();
    assertTrue(latch1.await(10, TimeUnit.SECONDS));
    given(channel.isOpen()).willReturn(false);
    assertTrue(latch2.await(10, TimeUnit.SECONDS));
    container.setShutdownTimeout(1);
    container.stop();
}

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

@Test
public void testCancelConsumerBeforeConsumeOk() throws Exception {
    ConnectionFactory mockCF = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Channel channel = mock(Channel.class);
    given(connection.isOpen()).willReturn(true);
    given(mockCF.createConnection()).willReturn(connection);
    given(connection.createChannel(false)).willReturn(channel);
    given(channel.isOpen()).willReturn(true);
    final CountDownLatch latch1 = new CountDownLatch(1);
    final CountDownLatch latch2 = new CountDownLatch(1);
    ArgumentCaptor<Consumer> consumerCaptor = ArgumentCaptor.forClass(Consumer.class);
    final String tag = "tag";
    willAnswer(i -> {/*from  w  ww  .ja  va2  s  .  c om*/
        latch1.countDown();
        return tag;
    }).given(channel).basicConsume(eq("foo"), anyBoolean(), anyString(), anyBoolean(), anyBoolean(), anyMap(),
            consumerCaptor.capture());
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(mockCF);
    container.setQueueNames("foo");
    container.setBeanName("backOff");
    container.setConsumerTagStrategy(q -> "tag");
    container.setShutdownTimeout(1);
    container.afterPropertiesSet();
    container.start();
    assertTrue(latch1.await(10, TimeUnit.SECONDS));
    Consumer consumer = consumerCaptor.getValue();
    Executors.newSingleThreadExecutor().execute(() -> {
        container.stop();
        latch2.countDown();
    });
    assertTrue(latch2.await(10, TimeUnit.SECONDS));
    verify(channel).basicCancel(tag); // canceled properly even without consumeOk
    consumer.handleCancelOk(tag);
}

From source file:org.springframework.amqp.rabbit.listener.DirectMessageListenerContainerIntegrationTests.java

private void testRecoverDeletedQueueGuts(boolean autoDeclare) throws Exception {
    CachingConnectionFactory cf = new CachingConnectionFactory("localhost");
    DirectMessageListenerContainer container = new DirectMessageListenerContainer(cf);
    if (autoDeclare) {
        GenericApplicationContext context = new GenericApplicationContext();
        context.getBeanFactory().registerSingleton("foo", new Queue(Q1));
        RabbitAdmin admin = new RabbitAdmin(cf);
        admin.setApplicationContext(context);
        context.getBeanFactory().registerSingleton("admin", admin);
        context.refresh();//w w  w  .jav a2 s  .  c  o  m
        container.setApplicationContext(context);
    }
    container.setAutoDeclare(autoDeclare);
    container.setQueueNames(Q1, Q2);
    container.setConsumersPerQueue(2);
    container.setConsumersPerQueue(2);
    container.setMessageListener(m -> {
    });
    container.setFailedDeclarationRetryInterval(500);
    container.setBeanName("deleteQauto=" + autoDeclare);
    container.setConsumerTagStrategy(new Tag());
    container.afterPropertiesSet();
    container.start();
    assertTrue(consumersOnQueue(Q1, 2));
    assertTrue(consumersOnQueue(Q2, 2));
    assertTrue(activeConsumerCount(container, 4));
    brokerRunning.deleteQueues(Q1);
    assertTrue(consumersOnQueue(Q2, 2));
    assertTrue(activeConsumerCount(container, 2));
    assertTrue(restartConsumerCount(container, 2));
    RabbitAdmin admin = new RabbitAdmin(cf);
    if (!autoDeclare) {
        Thread.sleep(2000);
        admin.declareQueue(new Queue(Q1));
    }
    assertTrue(consumersOnQueue(Q1, 2));
    assertTrue(consumersOnQueue(Q2, 2));
    assertTrue(activeConsumerCount(container, 4));
    container.stop();
    assertTrue(consumersOnQueue(Q1, 0));
    assertTrue(consumersOnQueue(Q2, 0));
    assertTrue(activeConsumerCount(container, 0));
    assertEquals(0, TestUtils.getPropertyValue(container, "consumersByQueue", MultiValueMap.class).size());
    cf.destroy();
}