Example usage for org.springframework.amqp.rabbit.connection Connection createChannel

List of usage examples for org.springframework.amqp.rabbit.connection Connection createChannel

Introduction

In this page you can find the example usage for org.springframework.amqp.rabbit.connection Connection createChannel.

Prototype

Channel createChannel(boolean transactional) throws AmqpException;

Source Link

Document

Create a new channel, using an internally allocated channel number.

Usage

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

@Test
public void testRestartConsumerOnBasicQosIoException() throws Exception {
    this.template.convertAndSend(queue.getName(), "foo");

    ConnectionFactory connectionFactory = new SingleConnectionFactory("localhost", BrokerTestUtils.getPort());

    final AtomicBoolean networkGlitch = new AtomicBoolean();

    class MockChannel extends PublisherCallbackChannelImpl {

        MockChannel(Channel delegate) {
            super(delegate);
        }//  w w  w.ja va2  s .  c  om

        @Override
        public void basicQos(int prefetchCount) throws IOException {
            if (networkGlitch.compareAndSet(false, true)) {
                throw new IOException("Intentional connection reset");
            }
            super.basicQos(prefetchCount);
        }

    }

    Connection connection = spy(connectionFactory.createConnection());
    when(connection.createChannel(anyBoolean()))
            .then(invocation -> new MockChannel((Channel) invocation.callRealMethod()));

    DirectFieldAccessor dfa = new DirectFieldAccessor(connectionFactory);
    dfa.setPropertyValue("connection", connection);

    CountDownLatch latch = new CountDownLatch(1);
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
    container.setMessageListener(new MessageListenerAdapter(new PojoListener(latch)));
    container.setQueueNames(queue.getName());
    container.setRecoveryInterval(500);
    container.afterPropertiesSet();
    container.start();

    assertTrue(latch.await(10, TimeUnit.SECONDS));
    assertTrue(networkGlitch.get());

    container.stop();
    ((DisposableBean) connectionFactory).destroy();
}

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

@Test
public void testRestartConsumerOnConnectionLossDuringQueueDeclare() throws Exception {
    this.template.convertAndSend(queue.getName(), "foo");

    ConnectionFactory connectionFactory = new CachingConnectionFactory("localhost", BrokerTestUtils.getPort());

    final AtomicBoolean networkGlitch = new AtomicBoolean();

    class MockChannel extends PublisherCallbackChannelImpl {

        MockChannel(Channel delegate) {
            super(delegate);
        }/*from w ww . ja v  a  2s. c o m*/

        @Override
        public DeclareOk queueDeclarePassive(String queue) throws IOException {
            if (networkGlitch.compareAndSet(false, true)) {
                getConnection().close();
                throw new IOException("Intentional connection reset");
            }
            return super.queueDeclarePassive(queue);
        }

    }

    Connection connection = spy(connectionFactory.createConnection());
    when(connection.createChannel(anyBoolean()))
            .then(invocation -> new MockChannel((Channel) invocation.callRealMethod()));

    DirectFieldAccessor dfa = new DirectFieldAccessor(connectionFactory);
    dfa.setPropertyValue("connection", connection);

    CountDownLatch latch = new CountDownLatch(1);
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
    container.setMessageListener(new MessageListenerAdapter(new PojoListener(latch)));
    container.setQueueNames(queue.getName());
    container.setRecoveryInterval(500);
    container.afterPropertiesSet();
    container.start();

    assertTrue(latch.await(10, TimeUnit.SECONDS));
    assertTrue(networkGlitch.get());

    container.stop();
    ((DisposableBean) connectionFactory).destroy();
}

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

@SuppressWarnings("unchecked")
@Test//www.  ja  v a2s  . c om
public void testTxSizeAcks() throws Exception {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Channel channel = mock(Channel.class);
    when(connectionFactory.createConnection()).thenReturn(connection);
    when(connection.createChannel(false)).thenReturn(channel);
    final AtomicReference<Consumer> consumer = new AtomicReference<Consumer>();
    doAnswer(invocation -> {
        consumer.set((Consumer) invocation.getArguments()[6]);
        consumer.get().handleConsumeOk("1");
        return "1";
    }).when(channel).basicConsume(anyString(), anyBoolean(), anyString(), anyBoolean(), anyBoolean(), anyMap(),
            any(Consumer.class));
    final CountDownLatch latch = new CountDownLatch(2);
    doAnswer(invocation -> {
        latch.countDown();
        return null;
    }).when(channel).basicAck(anyLong(), anyBoolean());

    final List<Message> messages = new ArrayList<Message>();
    final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
    container.setQueueNames("foo");
    container.setTxSize(2);
    container.setMessageListener((MessageListener) message -> messages.add(message));
    container.start();
    BasicProperties props = new BasicProperties();
    byte[] payload = "baz".getBytes();
    Envelope envelope = new Envelope(1L, false, "foo", "bar");
    consumer.get().handleDelivery("1", envelope, props, payload);
    envelope = new Envelope(2L, false, "foo", "bar");
    consumer.get().handleDelivery("1", envelope, props, payload);
    envelope = new Envelope(3L, false, "foo", "bar");
    consumer.get().handleDelivery("1", envelope, props, payload);
    envelope = new Envelope(4L, false, "foo", "bar");
    consumer.get().handleDelivery("1", envelope, props, payload);
    assertTrue(latch.await(5, TimeUnit.SECONDS));
    assertEquals(4, messages.size());
    Executors.newSingleThreadExecutor().execute(() -> container.stop());
    consumer.get().handleCancelOk("1");
    verify(channel, times(2)).basicAck(anyLong(), anyBoolean());
    verify(channel).basicAck(2, true);
    verify(channel).basicAck(4, true);
    container.stop();
}

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

@SuppressWarnings("unchecked")
@Test/*  w  w w  . java2s.  c o  m*/
public void testTxSizeAcksWIthShortSet() throws Exception {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Channel channel = mock(Channel.class);
    when(connectionFactory.createConnection()).thenReturn(connection);
    when(connection.createChannel(false)).thenReturn(channel);
    final AtomicReference<Consumer> consumer = new AtomicReference<Consumer>();
    final String consumerTag = "1";
    doAnswer(invocation -> {
        consumer.set((Consumer) invocation.getArguments()[6]);
        consumer.get().handleConsumeOk(consumerTag);
        return consumerTag;
    }).when(channel).basicConsume(anyString(), anyBoolean(), anyString(), anyBoolean(), anyBoolean(), anyMap(),
            any(Consumer.class));
    final CountDownLatch latch = new CountDownLatch(2);
    doAnswer(invocation -> {
        latch.countDown();
        return null;
    }).when(channel).basicAck(anyLong(), anyBoolean());

    final List<Message> messages = new ArrayList<Message>();
    final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
    container.setQueueNames("foobar");
    container.setTxSize(2);
    container.setMessageListener((MessageListener) message -> messages.add(message));
    container.start();
    BasicProperties props = new BasicProperties();
    byte[] payload = "baz".getBytes();
    Envelope envelope = new Envelope(1L, false, "foo", "bar");
    consumer.get().handleDelivery(consumerTag, envelope, props, payload);
    envelope = new Envelope(2L, false, "foo", "bar");
    consumer.get().handleDelivery(consumerTag, envelope, props, payload);
    envelope = new Envelope(3L, false, "foo", "bar");
    consumer.get().handleDelivery(consumerTag, envelope, props, payload);
    assertTrue(latch.await(5, TimeUnit.SECONDS));
    assertEquals(3, messages.size());
    assertEquals(consumerTag, messages.get(0).getMessageProperties().getConsumerTag());
    assertEquals("foobar", messages.get(0).getMessageProperties().getConsumerQueue());
    Executors.newSingleThreadExecutor().execute(() -> container.stop());
    consumer.get().handleCancelOk(consumerTag);
    verify(channel, times(2)).basicAck(anyLong(), anyBoolean());
    verify(channel).basicAck(2, true);
    // second set was short
    verify(channel).basicAck(3, true);
    container.stop();
}

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

@SuppressWarnings("unchecked")
@Test//from   www. jav  a  2 s .  c  o m
public void testConsumerArgs() throws Exception {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Channel channel = mock(Channel.class);
    when(connectionFactory.createConnection()).thenReturn(connection);
    when(connection.createChannel(false)).thenReturn(channel);
    final AtomicReference<Consumer> consumer = new AtomicReference<Consumer>();
    final AtomicReference<Map<?, ?>> args = new AtomicReference<Map<?, ?>>();
    doAnswer(invocation -> {
        consumer.set((Consumer) invocation.getArguments()[6]);
        consumer.get().handleConsumeOk("foo");
        args.set((Map<?, ?>) invocation.getArguments()[5]);
        return "foo";
    }).when(channel).basicConsume(anyString(), anyBoolean(), anyString(), anyBoolean(), anyBoolean(),
            any(Map.class), any(Consumer.class));

    final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
    container.setQueueNames("foo");
    container.setMessageListener((MessageListener) message -> {
    });
    container.setConsumerArguments(Collections.<String, Object>singletonMap("x-priority", Integer.valueOf(10)));
    container.afterPropertiesSet();
    container.start();
    verify(channel).basicConsume(anyString(), anyBoolean(), anyString(), anyBoolean(), anyBoolean(),
            any(Map.class), any(Consumer.class));
    assertTrue(args.get() != null);
    assertEquals(10, args.get().get("x-priority"));
    consumer.get().handleCancelOk("foo");
    container.stop();
}

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

@Test
public void testChangeQueues() throws Exception {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Channel channel1 = mock(Channel.class);
    Channel channel2 = mock(Channel.class);
    when(channel1.isOpen()).thenReturn(true);
    when(channel2.isOpen()).thenReturn(true);
    when(connectionFactory.createConnection()).thenReturn(connection);
    when(connection.createChannel(false)).thenReturn(channel1, channel2);
    List<Consumer> consumers = new ArrayList<Consumer>();
    AtomicInteger consumerTag = new AtomicInteger();
    CountDownLatch latch1 = new CountDownLatch(1);
    CountDownLatch latch2 = new CountDownLatch(2);
    setupMockConsume(channel1, consumers, consumerTag, latch1);
    setUpMockCancel(channel1, consumers);
    setupMockConsume(channel2, consumers, consumerTag, latch2);
    setUpMockCancel(channel2, consumers);

    final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
    container.setQueueNames("foo");
    container.setReceiveTimeout(1);//from  w ww . j  av  a 2s .  c  o m
    container.setMessageListener((MessageListener) message -> {
    });
    container.afterPropertiesSet();
    container.start();
    assertTrue(latch1.await(10, TimeUnit.SECONDS));
    container.addQueueNames("bar");
    assertTrue(latch2.await(10, TimeUnit.SECONDS));
    container.stop();
    verify(channel1).basicCancel("0");
    verify(channel2, atLeastOnce()).basicCancel("1");
    verify(channel2, atLeastOnce()).basicCancel("2");
}

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

@SuppressWarnings("unchecked")
@Test/*from  w w w . ja  v a  2s .co  m*/
public void testAddQueuesAndStartInCycle() throws Exception {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Channel channel1 = mock(Channel.class);
    when(channel1.isOpen()).thenReturn(true);
    when(connectionFactory.createConnection()).thenReturn(connection);
    when(connection.createChannel(false)).thenReturn(channel1);
    final AtomicInteger count = new AtomicInteger();
    doAnswer(invocation -> {
        Consumer cons = (Consumer) invocation.getArguments()[6];
        String consumerTag = "consFoo" + count.incrementAndGet();
        cons.handleConsumeOk(consumerTag);
        return consumerTag;
    }).when(channel1).basicConsume(anyString(), anyBoolean(), anyString(), anyBoolean(), anyBoolean(), anyMap(),
            any(Consumer.class));

    final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
    container.setMessageListener((MessageListener) message -> {
    });
    container.afterPropertiesSet();

    for (int i = 0; i < 10; i++) {
        container.addQueueNames("foo" + i);
        if (!container.isRunning()) {
            container.start();
        }
    }
    container.stop();
}

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

@SuppressWarnings("unchecked")
@Test//  w  w  w  .j  ava 2s.com
public void testConsumerCancel() throws Exception {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Channel channel = mock(Channel.class);
    when(connectionFactory.createConnection()).thenReturn(connection);
    when(connection.createChannel(false)).thenReturn(channel);
    final AtomicReference<Consumer> consumer = new AtomicReference<Consumer>();
    doAnswer(invocation -> {
        consumer.set((Consumer) invocation.getArguments()[6]);
        consumer.get().handleConsumeOk("foo");
        return "foo";
    }).when(channel).basicConsume(anyString(), anyBoolean(), anyString(), anyBoolean(), anyBoolean(), anyMap(),
            any(Consumer.class));

    final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
    container.setQueueNames("foo");
    container.setMessageListener((MessageListener) message -> {
    });
    container.setReceiveTimeout(1);
    container.afterPropertiesSet();
    container.start();
    verify(channel).basicConsume(anyString(), anyBoolean(), anyString(), anyBoolean(), anyBoolean(), anyMap(),
            any(Consumer.class));
    Log logger = spy(TestUtils.getPropertyValue(container, "logger", Log.class));
    doReturn(false).when(logger).isDebugEnabled();
    final CountDownLatch latch = new CountDownLatch(1);
    doAnswer(invocation -> {
        if (((String) invocation.getArguments()[0]).startsWith("Consumer raised exception")) {
            latch.countDown();
        }
        return invocation.callRealMethod();
    }).when(logger).warn(any());
    new DirectFieldAccessor(container).setPropertyValue("logger", logger);
    consumer.get().handleCancel("foo");
    assertTrue(latch.await(10, TimeUnit.SECONDS));
    container.stop();
}

From source file:org.springframework.amqp.rabbit.support.RabbitAccessor.java

/**
 * Create a RabbitMQ Channel for the given Connection.
 * @param con the RabbitMQ Connection to create a Channel for
 * @return the new RabbitMQ Channel//from   www .  j ava 2 s . co m
 * @throws IOException if thrown by RabbitMQ API methods
 */
protected Channel createChannel(Connection con) throws IOException {
    Assert.notNull(con, "connection must not be null");
    Channel channel = con.createChannel(false);
    return channel;
}

From source file:org.springframework.cloud.stream.binder.rabbit.LocalizedQueueConnectionFactoryTests.java

@SuppressWarnings("unchecked")
private ConnectionFactory mockCF(final String address) throws Exception {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Channel channel = mock(Channel.class);
    when(connectionFactory.createConnection()).thenReturn(connection);
    when(connection.createChannel(false)).thenReturn(channel);
    when(connection.isOpen()).thenReturn(true);
    when(channel.isOpen()).thenReturn(true);
    doAnswer(new Answer<String>() {

        @Override/*from  www  .  j ava2  s.  c o m*/
        public String answer(InvocationOnMock invocation) throws Throwable {
            String tag = UUID.randomUUID().toString();
            consumers.put(address, (Consumer) invocation.getArguments()[6]);
            consumerTags.put(address, tag);
            latch.countDown();
            return tag;
        }
    }).when(channel).basicConsume(anyString(), anyBoolean(), anyString(), anyBoolean(), anyBoolean(), anyMap(),
            any(Consumer.class));
    when(connectionFactory.getHost()).thenReturn(address);
    this.cfs.put(address, connectionFactory);
    this.connections.put(address, connection);
    this.channels.put(address, channel);
    return connectionFactory;
}