private void assertQueues(AbstractRabbitListenerEndpoint actual, String... expectedQueues) { Collection<String> actualQueues = actual.getQueueNames(); for (String expectedQueue : expectedQueues) { assertTrue("Queue '" + expectedQueue + "' not found", actualQueues.contains(expectedQueue)); } assertEquals("Wrong number of queues", expectedQueues.length, actualQueues.size()); }
@Override public void setupListenerContainer(MessageListenerContainer listenerContainer) { AbstractMessageListenerContainer container = (AbstractMessageListenerContainer) listenerContainer; boolean queuesEmpty = getQueues().isEmpty(); boolean queueNamesEmpty = getQueueNames().isEmpty(); if (!queuesEmpty && !queueNamesEmpty) { throw new IllegalStateException("Queues or queue names must be provided but not both for " + this); } if (queuesEmpty) { Collection<String> names = getQueueNames(); container.setQueueNames(names.toArray(new String[names.size()])); } else { Collection<Queue> instances = getQueues(); container.setQueues(instances.toArray(new Queue[instances.size()])); } container.setExclusive(isExclusive()); if (getPriority() != null) { Map<String, Object> args = new HashMap<String, Object>(); args.put("x-priority", getPriority()); container.setConsumerArguments(args); } if (getAdmin() != null) { container.setAmqpAdmin(getAdmin()); } setupMessageListener(listenerContainer); }
@Override public void setupListenerContainer(MessageListenerContainer listenerContainer) { AbstractMessageListenerContainer container = (AbstractMessageListenerContainer) listenerContainer; boolean queuesEmpty = getQueues().isEmpty(); boolean queueNamesEmpty = getQueueNames().isEmpty(); if (!queuesEmpty && !queueNamesEmpty) { throw new IllegalStateException("Queues or queue names must be provided but not both for " + this); } if (queuesEmpty) { Collection<String> names = getQueueNames(); container.setQueueNames(names.toArray(new String[names.size()])); } else { Collection<Queue> instances = getQueues(); container.setQueues(instances.toArray(new Queue[instances.size()])); } container.setExclusive(isExclusive()); if (getPriority() != null) { Map<String, Object> args = new HashMap<String, Object>(); args.put("x-priority", getPriority()); container.setConsumerArguments(args); } if (getAdmin() != null) { container.setAmqpAdmin(getAdmin()); } setupMessageListener(listenerContainer); }
@Test public void metaAnnotationIsDiscovered() { ConfigurableApplicationContext context = new AnnotationConfigApplicationContext( Config.class, MetaAnnotationTestBean.class); RabbitListenerContainerTestFactory factory = context.getBean(RabbitListenerContainerTestFactory.class); assertEquals("one container should have been registered", 1, factory.getListenerContainers().size()); RabbitListenerEndpoint endpoint = factory.getListenerContainers().get(0).getEndpoint(); assertEquals("metaTestQueue", ((AbstractRabbitListenerEndpoint) endpoint).getQueueNames().iterator().next()); context.close(); }
@Test public void multipleQueueNamesTestBean() { ConfigurableApplicationContext context = new AnnotationConfigApplicationContext( Config.class, MultipleQueueNamesTestBean.class); RabbitListenerContainerTestFactory factory = context.getBean(RabbitListenerContainerTestFactory.class); assertEquals("one container should have been registered", 1, factory.getListenerContainers().size()); RabbitListenerEndpoint endpoint = factory.getListenerContainers().get(0).getEndpoint(); final Iterator<String> iterator = ((AbstractRabbitListenerEndpoint) endpoint).getQueueNames().iterator(); assertEquals("metaTestQueue", iterator.next()); assertEquals("testQueue", iterator.next()); context.close(); }
@Test public void multipleQueuesTestBean() { ConfigurableApplicationContext context = new AnnotationConfigApplicationContext( Config.class, MultipleQueuesTestBean.class); RabbitListenerContainerTestFactory factory = context.getBean(RabbitListenerContainerTestFactory.class); assertEquals("one container should have been registered", 1, factory.getListenerContainers().size()); RabbitListenerEndpoint endpoint = factory.getListenerContainers().get(0).getEndpoint(); final Iterator<String> iterator = ((AbstractRabbitListenerEndpoint) endpoint).getQueueNames().iterator(); assertEquals("testQueue", iterator.next()); assertEquals("secondQueue", iterator.next()); context.close(); }
@Test public void propertyResolvingToExpressionTestBean() { ConfigurableApplicationContext context = new AnnotationConfigApplicationContext( Config.class, PropertyResolvingToExpressionTestBean.class); RabbitListenerContainerTestFactory factory = context.getBean(RabbitListenerContainerTestFactory.class); assertEquals("one container should have been registered", 1, factory.getListenerContainers().size()); RabbitListenerEndpoint endpoint = factory.getListenerContainers().get(0).getEndpoint(); final Iterator<String> iterator = ((AbstractRabbitListenerEndpoint) endpoint).getQueueNames().iterator(); assertEquals("testQueue", iterator.next()); assertEquals("secondQueue", iterator.next()); context.close(); }
@Test public void mixedQueuesAndQueueNamesTestBean() { ConfigurableApplicationContext context = new AnnotationConfigApplicationContext( Config.class, MixedQueuesAndQueueNamesTestBean.class); RabbitListenerContainerTestFactory factory = context.getBean(RabbitListenerContainerTestFactory.class); assertEquals("one container should have been registered", 1, factory.getListenerContainers().size()); RabbitListenerEndpoint endpoint = factory.getListenerContainers().get(0).getEndpoint(); final Iterator<String> iterator = ((AbstractRabbitListenerEndpoint) endpoint).getQueueNames().iterator(); assertEquals("metaTestQueue", iterator.next()); assertEquals("testQueue", iterator.next()); assertEquals("secondQueue", iterator.next()); context.close(); }
@Test public void multipleRoutingKeysTestBean() { ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(Config.class, MultipleRoutingKeysTestBean.class); RabbitListenerContainerTestFactory factory = context.getBean(RabbitListenerContainerTestFactory.class); assertThat("one container should have been registered", factory.getListenerContainers(), hasSize(1)); RabbitListenerEndpoint endpoint = factory.getListenerContainers().get(0).getEndpoint(); assertEquals(Collections.singletonList("my_queue"), ((AbstractRabbitListenerEndpoint) endpoint).getQueueNames()); final List<Queue> queues = new ArrayList<>(context.getBeansOfType(Queue.class).values()); queues.sort(Comparator.comparing(Queue::getName)); assertThat(queues.stream().map(Queue::getName).collect(Collectors.toList()), contains("my_queue", "secondQueue", "testQueue")); assertEquals(Collections.singletonMap("foo", "bar"), queues.get(0).getArguments()); assertThat(context.getBeansOfType(org.springframework.amqp.core.Exchange.class).values(), hasSize(1)); final List<Binding> bindings = new ArrayList<>(context.getBeansOfType(Binding.class).values()); assertThat(bindings, hasSize(2)); bindings.sort(Comparator.comparing(Binding::getRoutingKey)); assertEquals("Binding [destination=my_queue, exchange=my_exchange, routingKey=red]", bindings.get(0).toString()); assertEquals("Binding [destination=my_queue, exchange=my_exchange, routingKey=yellow]", bindings.get(1).toString()); context.close(); }