@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); }
private void setupMessageListener(MessageListenerContainer container) { MessageListener messageListener = createMessageListener(container); Assert.state(messageListener != null, () -> "Endpoint [" + this + "] must provide a non null message listener"); container.setupMessageListener(messageListener); }
@Override public String toString() { return getEndpointDescription().toString(); }
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 MessageListenerTestContainer createListenerContainer(RabbitListenerEndpoint endpoint) { MessageListenerTestContainer container = new MessageListenerTestContainer(endpoint); // resolve the id if (endpoint.getId() == null && endpoint instanceof AbstractRabbitListenerEndpoint) { ((AbstractRabbitListenerEndpoint) endpoint).setId("endpoint#" + counter.getAndIncrement()); } String id = endpoint.getId(); assertNotNull(this.getClass().getSimpleName() + " does not support " + endpoint.getClass().getSimpleName() + " without an id", id); this.listenerContainers.put(id, container); return container; }
@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(); }
@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 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(); }
@Override public String toString() { return getEndpointDescription().toString(); }
private void setupMessageListener(MessageListenerContainer container) { MessageListener messageListener = createMessageListener(container); Assert.state(messageListener != null, () -> "Endpoint [" + this + "] must provide a non null message listener"); container.setupMessageListener(messageListener); }
@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(); }
@Override protected StringBuilder getEndpointDescription() { return super.getEndpointDescription() .append(" | messageListener='").append(this.messageListener).append("'"); }
@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(); }
@Override protected StringBuilder getEndpointDescription() { return super.getEndpointDescription() .append(" | messageListener='").append(this.messageListener).append("'"); }
@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(); }
@Override protected StringBuilder getEndpointDescription() { return super.getEndpointDescription() .append(" | bean='").append(this.bean).append("'") .append(" | method='").append(this.method).append("'"); }
@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(); }
@Override protected StringBuilder getEndpointDescription() { return super.getEndpointDescription() .append(" | bean='").append(this.bean).append("'") .append(" | method='").append(this.method).append("'"); }