List of usage examples for org.springframework.amqp.rabbit.connection CachingConnectionFactory destroy
@Override public final void destroy()
From source file:com.xoom.rabbit.test.Main.java
public static void main(String[] args) throws InterruptedException { if (args.length != 9) { System.out.println(// w w w . j a va2 s . c o m "usage: java -jar target/rabbit-tester-0.1-SNAPSHOT-standalone.jar [consumer_threads] [number_of_messages] [amqp_host] [amqp_port] [produce] [consume] [message size in bytes] [username] [password]"); return; } final long startTime = System.currentTimeMillis(); int consumerThreads = Integer.parseInt(args[0]); final int messages = Integer.parseInt(args[1]); String host = args[2]; int port = Integer.parseInt(args[3]); boolean produce = Boolean.parseBoolean(args[4]); boolean consume = Boolean.parseBoolean(args[5]); final int messageSize = Integer.parseInt(args[6]); String username = args[7]; String password = args[8]; if (produce) { System.out.println("Sending " + messages + " messages to " + host + ":" + port); } if (consume) { System.out.println("Consuming " + messages + " messages from " + host + ":" + port); } if (!produce && !consume) { System.out.println("Not producing or consuming any messages."); } CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host, port); connectionFactory.setUsername(username); connectionFactory.setPassword(password); connectionFactory.setChannelCacheSize(consumerThreads + 1); RabbitAdmin amqpAdmin = new RabbitAdmin(connectionFactory); DirectExchange exchange = new DirectExchange(EXCHANGE_NAME, true, false); Queue queue = new Queue(QUEUE_NAME); amqpAdmin.declareExchange(exchange); amqpAdmin.declareQueue(queue); amqpAdmin.declareBinding(BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY)); final AmqpTemplate amqpTemplate = new RabbitTemplate(connectionFactory); final CountDownLatch producerLatch = new CountDownLatch(messages); final CountDownLatch consumerLatch = new CountDownLatch(messages); SimpleMessageListenerContainer listenerContainer = null; if (consume) { listenerContainer = new SimpleMessageListenerContainer(); listenerContainer.setConnectionFactory(connectionFactory); listenerContainer.setQueueNames(QUEUE_NAME); listenerContainer.setConcurrentConsumers(consumerThreads); listenerContainer.setMessageListener(new MessageListener() { @Override public void onMessage(Message message) { if (consumerLatch.getCount() == 1) { System.out.println("Finished consuming " + messages + " messages in " + (System.currentTimeMillis() - startTime) + "ms"); } consumerLatch.countDown(); } }); listenerContainer.start(); } if (produce) { while (producerLatch.getCount() > 0) { try { byte[] message = new byte[messageSize]; RND.nextBytes(message); amqpTemplate.send(EXCHANGE_NAME, ROUTING_KEY, new Message(message, new MessageProperties())); producerLatch.countDown(); } catch (Exception e) { System.out.println("Failed to send message " + (messages - producerLatch.getCount()) + " will retry forever."); } } } if (consume) { consumerLatch.await(); listenerContainer.shutdown(); } connectionFactory.destroy(); }
From source file:com.noriental.solr.config.test.BrokerRunning.java
public void removeTestQueues() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost("localhost"); RabbitAdmin admin = new RabbitAdmin(connectionFactory); for (Queue queue : this.queues) { admin.deleteQueue(queue.getName()); }//from w ww . j a v a 2s.c o m connectionFactory.destroy(); }
From source file:com.noriental.solr.config.test.BrokerRunning.java
@Override public Statement apply(Statement base, Description description) { // Check at the beginning, so this can be used as a static field if (assumeOnline) { Assume.assumeTrue(brokerOnline.get(port)); } else {/* ww w . j a va 2 s .c o m*/ Assume.assumeTrue(brokerOffline.get(port)); } CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost("localhost"); try { connectionFactory.setPort(port); if (StringUtils.hasText(hostName)) { connectionFactory.setHost(hostName); } RabbitAdmin admin = new RabbitAdmin(connectionFactory); for (Queue queue : queues) { String queueName = queue.getName(); if (purge) { logger.debug("Deleting queue: " + queueName); // Delete completely - gets rid of consumers and bindings as well admin.deleteQueue(queueName); } if (isDefaultQueue(queueName)) { // Just for test probe. admin.deleteQueue(queueName); } else { admin.declareQueue(queue); } } brokerOffline.put(port, false); if (!assumeOnline) { Assume.assumeTrue(brokerOffline.get(port)); } if (this.management) { Client client = new Client("http://localhost:15672/api/", "guest", "guest"); if (!client.alivenessTest("/")) { throw new RuntimeException( "Aliveness test failed for localhost:15672 guest/quest; " + "management not available"); } } } catch (AmqpTimeoutException e) { fail("Timed out getting connection"); } catch (Exception e) { logger.warn("Not executing tests because basic connectivity test failed", e); brokerOnline.put(port, false); if (assumeOnline) { Assume.assumeNoException(e); } } finally { connectionFactory.destroy(); } return super.apply(base, description); }
From source file:org.springframework.cloud.stream.binder.rabbit.RabbitBinderCleanerTests.java
@Test public void testCleanStream() { final RabbitBindingCleaner cleaner = new RabbitBindingCleaner(); final RestTemplate template = RabbitManagementUtils.buildRestTemplate("http://localhost:15672", "guest", "guest"); final String stream1 = UUID.randomUUID().toString(); String stream2 = stream1 + "-1"; String firstQueue = null;// w ww.ja v a 2 s . c o m CachingConnectionFactory connectionFactory = rabbitWithMgmtEnabled.getResource(); RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); for (int i = 0; i < 5; i++) { String queue1Name = AbstractBinder.applyPrefix(BINDER_PREFIX, stream1 + ".default." + i); String queue2Name = AbstractBinder.applyPrefix(BINDER_PREFIX, stream2 + ".default." + i); if (firstQueue == null) { firstQueue = queue1Name; } URI uri = UriComponentsBuilder.fromUriString("http://localhost:15672/api/queues") .pathSegment("{vhost}", "{queue}").buildAndExpand("/", queue1Name).encode().toUri(); template.put(uri, new AmqpQueue(false, true)); uri = UriComponentsBuilder.fromUriString("http://localhost:15672/api/queues") .pathSegment("{vhost}", "{queue}").buildAndExpand("/", queue2Name).encode().toUri(); template.put(uri, new AmqpQueue(false, true)); uri = UriComponentsBuilder.fromUriString("http://localhost:15672/api/queues") .pathSegment("{vhost}", "{queue}") .buildAndExpand("/", AbstractBinder.constructDLQName(queue1Name)).encode().toUri(); template.put(uri, new AmqpQueue(false, true)); TopicExchange exchange = new TopicExchange(queue1Name); rabbitAdmin.declareExchange(exchange); rabbitAdmin.declareBinding(BindingBuilder.bind(new Queue(queue1Name)).to(exchange).with(queue1Name)); exchange = new TopicExchange(queue2Name); rabbitAdmin.declareExchange(exchange); rabbitAdmin.declareBinding(BindingBuilder.bind(new Queue(queue2Name)).to(exchange).with(queue2Name)); } final TopicExchange topic1 = new TopicExchange( AbstractBinder.applyPrefix(BINDER_PREFIX, stream1 + ".foo.bar")); rabbitAdmin.declareExchange(topic1); rabbitAdmin.declareBinding(BindingBuilder.bind(new Queue(firstQueue)).to(topic1).with("#")); String foreignQueue = UUID.randomUUID().toString(); rabbitAdmin.declareQueue(new Queue(foreignQueue)); rabbitAdmin.declareBinding(BindingBuilder.bind(new Queue(foreignQueue)).to(topic1).with("#")); final TopicExchange topic2 = new TopicExchange( AbstractBinder.applyPrefix(BINDER_PREFIX, stream2 + ".foo.bar")); rabbitAdmin.declareExchange(topic2); rabbitAdmin.declareBinding(BindingBuilder.bind(new Queue(firstQueue)).to(topic2).with("#")); new RabbitTemplate(connectionFactory).execute(new ChannelCallback<Void>() { @Override public Void doInRabbit(Channel channel) throws Exception { String queueName = AbstractBinder.applyPrefix(BINDER_PREFIX, stream1 + ".default." + 4); String consumerTag = channel.basicConsume(queueName, new DefaultConsumer(channel)); try { waitForConsumerStateNot(queueName, 0); cleaner.clean(stream1, false); fail("Expected exception"); } catch (RabbitAdminException e) { assertThat(e).hasMessageContaining("Queue " + queueName + " is in use"); } channel.basicCancel(consumerTag); waitForConsumerStateNot(queueName, 1); try { cleaner.clean(stream1, false); fail("Expected exception"); } catch (RabbitAdminException e) { assertThat(e).hasMessageContaining("Cannot delete exchange "); assertThat(e).hasMessageContaining("; it has bindings:"); } return null; } private void waitForConsumerStateNot(String queueName, int state) throws InterruptedException { int n = 0; URI uri = UriComponentsBuilder.fromUriString("http://localhost:15672/api/queues") .pathSegment("{vhost}", "{queue}").buildAndExpand("/", queueName).encode().toUri(); while (n++ < 100) { @SuppressWarnings("unchecked") Map<String, Object> queueInfo = template.getForObject(uri, Map.class); if (!queueInfo.get("consumers").equals(Integer.valueOf(state))) { break; } Thread.sleep(100); } assertThat(n < 100).withFailMessage("Consumer state remained at " + state + " after 10 seconds"); } }); rabbitAdmin.deleteExchange(topic1.getName()); // easier than deleting the binding rabbitAdmin.declareExchange(topic1); rabbitAdmin.deleteQueue(foreignQueue); connectionFactory.destroy(); Map<String, List<String>> cleanedMap = cleaner.clean(stream1, false); assertThat(cleanedMap).hasSize(2); List<String> cleanedQueues = cleanedMap.get("queues"); // should *not* clean stream2 assertThat(cleanedQueues).hasSize(10); for (int i = 0; i < 5; i++) { assertThat(cleanedQueues.get(i * 2)).isEqualTo(BINDER_PREFIX + stream1 + ".default." + i); assertThat(cleanedQueues.get(i * 2 + 1)).isEqualTo(BINDER_PREFIX + stream1 + ".default." + i + ".dlq"); } List<String> cleanedExchanges = cleanedMap.get("exchanges"); assertThat(cleanedExchanges).hasSize(6); // wild card *should* clean stream2 cleanedMap = cleaner.clean(stream1 + "*", false); assertThat(cleanedMap).hasSize(2); cleanedQueues = cleanedMap.get("queues"); assertThat(cleanedQueues).hasSize(5); for (int i = 0; i < 5; i++) { assertThat(cleanedQueues.get(i)).isEqualTo(BINDER_PREFIX + stream2 + ".default." + i); } cleanedExchanges = cleanedMap.get("exchanges"); assertThat(cleanedExchanges).hasSize(6); }
From source file:org.springframework.amqp.rabbit.connection.CachingConnectionFactoryTests.java
@Test public void testCheckoutLimit() throws Exception { com.rabbitmq.client.ConnectionFactory mockConnectionFactory = mock( com.rabbitmq.client.ConnectionFactory.class); com.rabbitmq.client.Connection mockConnection = mock(com.rabbitmq.client.Connection.class); Channel mockChannel1 = mock(Channel.class); when(mockConnectionFactory.newConnection(any(ExecutorService.class), anyString())) .thenReturn(mockConnection); when(mockConnection.createChannel()).thenReturn(mockChannel1); when(mockConnection.isOpen()).thenReturn(true); // Called during physical close when(mockChannel1.isOpen()).thenReturn(true); CachingConnectionFactory ccf = new CachingConnectionFactory(mockConnectionFactory); ccf.setExecutor(mock(ExecutorService.class)); ccf.setChannelCacheSize(1);/* ww w. jav a 2s . co m*/ ccf.setChannelCheckoutTimeout(10); Connection con = ccf.createConnection(); Channel channel1 = con.createChannel(false); try { con.createChannel(false); fail("Exception expected"); } catch (AmqpTimeoutException e) { } // should be ignored, and added last into channel cache. channel1.close(); // remove first entry in cache (channel1) Channel ch1 = con.createChannel(false); assertSame(ch1, channel1); ch1.close(); verify(mockConnection, times(1)).createChannel(); con.close(); // should be ignored verify(mockConnection, never()).close(); verify(mockChannel1, never()).close(); ccf.destroy(); }
From source file:org.springframework.amqp.rabbit.connection.CachingConnectionFactoryTests.java
@Test public void testCheckoutLimitWithFailures() throws Exception { com.rabbitmq.client.ConnectionFactory mockConnectionFactory = mock( com.rabbitmq.client.ConnectionFactory.class); final com.rabbitmq.client.Connection mockConnection = mock(com.rabbitmq.client.Connection.class); Channel mockChannel1 = mock(Channel.class); final AtomicBoolean brokerDown = new AtomicBoolean(); willAnswer(i -> {//from w w w. j av a 2 s . c o m if (brokerDown.get()) { throw new AmqpConnectException(null); } return mockConnection; }).given(mockConnectionFactory).newConnection((ExecutorService) isNull(), anyString()); when(mockConnection.createChannel()).thenReturn(mockChannel1); doAnswer(i -> !brokerDown.get()).when(mockConnection).isOpen(); // Called during physical close doAnswer(i -> !brokerDown.get()).when(mockChannel1).isOpen(); CachingConnectionFactory ccf = new CachingConnectionFactory(mockConnectionFactory); ccf.setChannelCacheSize(1); ccf.setChannelCheckoutTimeout(10); Connection con = ccf.createConnection(); Channel channel1 = con.createChannel(false); try { con.createChannel(false); fail("Exception expected"); } catch (AmqpTimeoutException e) { } // should be ignored, and added last into channel cache. channel1.close(); // remove first entry in cache (channel1) Channel ch1 = con.createChannel(false); assertSame(ch1, channel1); ch1.close(); brokerDown.set(true); try { con.createChannel(false); fail("Exception expected"); } catch (AmqpConnectException e) { } brokerDown.set(false); ch1 = con.createChannel(false); ch1.close(); ccf.destroy(); }
From source file:org.springframework.amqp.rabbit.connection.CachingConnectionFactoryTests.java
@Test public void testConnectionLimit() throws Exception { com.rabbitmq.client.ConnectionFactory mockConnectionFactory = mock( com.rabbitmq.client.ConnectionFactory.class); com.rabbitmq.client.Connection mockConnection = mock(com.rabbitmq.client.Connection.class); when(mockConnectionFactory.newConnection(any(ExecutorService.class), anyString())) .thenReturn(mockConnection); when(mockConnection.isOpen()).thenReturn(true); final CachingConnectionFactory ccf = new CachingConnectionFactory(mockConnectionFactory); ccf.setExecutor(mock(ExecutorService.class)); ccf.setCacheMode(CacheMode.CONNECTION); ccf.setConnectionCacheSize(1);//from w ww.jav a 2s .c om ccf.setConnectionLimit(1); ccf.setChannelCheckoutTimeout(10); Connection con1 = ccf.createConnection(); try { ccf.createConnection(); fail("Exception expected"); } catch (AmqpTimeoutException e) { } // should be ignored, and added to cache con1.close(); Connection con2 = ccf.createConnection(); assertSame(con1, con2); final CountDownLatch latch2 = new CountDownLatch(1); final CountDownLatch latch1 = new CountDownLatch(1); final AtomicReference<Connection> connection = new AtomicReference<Connection>(); ccf.setChannelCheckoutTimeout(30000); Executors.newSingleThreadExecutor().execute(() -> { latch1.countDown(); connection.set(ccf.createConnection()); latch2.countDown(); }); assertTrue(latch1.await(10, TimeUnit.SECONDS)); Thread.sleep(100); con2.close(); assertTrue(latch2.await(10, TimeUnit.SECONDS)); assertSame(con2, connection.get()); ccf.destroy(); }
From source file:org.springframework.amqp.rabbit.connection.CachingConnectionFactoryTests.java
private void testCheckoutsWithRefreshedConnectionGuts(CacheMode mode) throws Exception { com.rabbitmq.client.ConnectionFactory mockConnectionFactory = mock( com.rabbitmq.client.ConnectionFactory.class); com.rabbitmq.client.Connection mockConnection1 = mock(com.rabbitmq.client.Connection.class); com.rabbitmq.client.Connection mockConnection2 = mock(com.rabbitmq.client.Connection.class); Channel mockChannel1 = mock(Channel.class); Channel mockChannel2 = mock(Channel.class); Channel mockChannel3 = mock(Channel.class); Channel mockChannel4 = mock(Channel.class); when(mockConnectionFactory.newConnection(any(ExecutorService.class), anyString())) .thenReturn(mockConnection1, mockConnection2); when(mockConnection1.createChannel()).thenReturn(mockChannel1, mockChannel2); when(mockConnection1.isOpen()).thenReturn(true); when(mockConnection2.createChannel()).thenReturn(mockChannel3, mockChannel4); when(mockConnection2.isOpen()).thenReturn(true); when(mockChannel1.isOpen()).thenReturn(true); when(mockChannel2.isOpen()).thenReturn(true); when(mockChannel3.isOpen()).thenReturn(true); when(mockChannel4.isOpen()).thenReturn(true); CachingConnectionFactory ccf = new CachingConnectionFactory(mockConnectionFactory); ccf.setExecutor(mock(ExecutorService.class)); ccf.setChannelCacheSize(2);/* w w w . ja v a 2 s . c o m*/ ccf.setChannelCheckoutTimeout(10); ccf.setCacheMode(mode); ccf.addConnectionListener(connection -> { try { // simulate admin connection.createChannel(false).close(); } catch (Exception e) { fail(e.getMessage()); } }); Connection con = ccf.createConnection(); Channel channel1 = con.createChannel(false); assertEquals(1, ((Semaphore) TestUtils.getPropertyValue(ccf, "checkoutPermits", Map.class).values() .iterator().next()).availablePermits()); channel1.close(); con.close(); assertEquals(2, ((Semaphore) TestUtils.getPropertyValue(ccf, "checkoutPermits", Map.class).values() .iterator().next()).availablePermits()); when(mockConnection1.isOpen()).thenReturn(false); when(mockChannel1.isOpen()).thenReturn(false); when(mockChannel2.isOpen()).thenReturn(false); con.createChannel(false).close(); con = ccf.createConnection(); con.createChannel(false).close(); con.createChannel(false).close(); con.createChannel(false).close(); con.createChannel(false).close(); con.createChannel(false).close(); verify(mockConnection1, times(1)).createChannel(); verify(mockConnection2, times(2)).createChannel(); con.close(); verify(mockConnection2, never()).close(); assertEquals(2, ((Semaphore) TestUtils.getPropertyValue(ccf, "checkoutPermits", Map.class).values() .iterator().next()).availablePermits()); ccf.destroy(); assertEquals(2, ((Semaphore) TestUtils.getPropertyValue(ccf, "checkoutPermits", Map.class).values() .iterator().next()).availablePermits()); }
From source file:org.springframework.amqp.rabbit.connection.CachingConnectionFactoryTests.java
@Test public void testCheckoutLimitWithRelease() throws IOException, Exception { com.rabbitmq.client.ConnectionFactory mockConnectionFactory = mock( com.rabbitmq.client.ConnectionFactory.class); com.rabbitmq.client.Connection mockConnection = mock(com.rabbitmq.client.Connection.class); Channel mockChannel1 = mock(Channel.class); when(mockConnectionFactory.newConnection(any(ExecutorService.class), anyString())) .thenReturn(mockConnection); when(mockConnection.createChannel()).thenReturn(mockChannel1); when(mockConnection.isOpen()).thenReturn(true); // Called during physical close when(mockChannel1.isOpen()).thenReturn(true); CachingConnectionFactory ccf = new CachingConnectionFactory(mockConnectionFactory); ccf.setExecutor(mock(ExecutorService.class)); ccf.setChannelCacheSize(1);/*from w w w. j ava 2 s .co m*/ ccf.setChannelCheckoutTimeout(10000); final Connection con = ccf.createConnection(); final AtomicReference<Channel> channelOne = new AtomicReference<Channel>(); final CountDownLatch latch = new CountDownLatch(1); new Thread(() -> { Channel channel1 = con.createChannel(false); latch.countDown(); channelOne.set(channel1); try { Thread.sleep(100); channel1.close(); } catch (InterruptedException e1) { Thread.currentThread().interrupt(); } catch (IOException e2) { } catch (TimeoutException e3) { } }).start(); assertTrue(latch.await(10, TimeUnit.SECONDS)); Channel channel2 = con.createChannel(false); assertSame(channelOne.get(), channel2); channel2.close(); verify(mockConnection, never()).close(); verify(mockChannel1, never()).close(); ccf.destroy(); }
From source file:org.springframework.amqp.rabbit.connection.CachingConnectionFactoryTests.java
@Test public void testReleaseWithForcedPhysicalClose() throws Exception { com.rabbitmq.client.ConnectionFactory mockConnectionFactory = mock( com.rabbitmq.client.ConnectionFactory.class); com.rabbitmq.client.Connection mockConnection1 = mock(com.rabbitmq.client.Connection.class); Channel mockChannel1 = mock(Channel.class); when(mockConnectionFactory.newConnection(any(ExecutorService.class), anyString())) .thenReturn(mockConnection1); when(mockConnection1.createChannel()).thenReturn(mockChannel1); when(mockConnection1.isOpen()).thenReturn(true); when(mockChannel1.isOpen()).thenReturn(true); CachingConnectionFactory ccf = new CachingConnectionFactory(mockConnectionFactory); ccf.setExecutor(mock(ExecutorService.class)); ccf.setChannelCacheSize(1);/*from w w w . j av a 2s . co m*/ ccf.setChannelCheckoutTimeout(10); Connection con = ccf.createConnection(); Channel channel1 = con.createChannel(false); assertEquals(0, ((Semaphore) TestUtils.getPropertyValue(ccf, "checkoutPermits", Map.class).values() .iterator().next()).availablePermits()); channel1.close(); con.close(); assertEquals(1, ((Semaphore) TestUtils.getPropertyValue(ccf, "checkoutPermits", Map.class).values() .iterator().next()).availablePermits()); channel1 = con.createChannel(false); RabbitUtils.setPhysicalCloseRequired(channel1, true); assertEquals(0, ((Semaphore) TestUtils.getPropertyValue(ccf, "checkoutPermits", Map.class).values() .iterator().next()).availablePermits()); channel1.close(); RabbitUtils.setPhysicalCloseRequired(channel1, false); con.close(); verify(mockChannel1).close(); verify(mockConnection1, never()).close(); assertEquals(1, ((Semaphore) TestUtils.getPropertyValue(ccf, "checkoutPermits", Map.class).values() .iterator().next()).availablePermits()); ccf.destroy(); assertEquals(1, ((Semaphore) TestUtils.getPropertyValue(ccf, "checkoutPermits", Map.class).values() .iterator().next()).availablePermits()); }