@Test public void testBindings() throws Exception { Map<String, Binding> bindings = beanFactory.getBeansOfType(Binding.class); // 4 for each exchange type assertEquals(13, bindings.size()); for (Map.Entry<String, Binding> bindingEntry : bindings.entrySet()) { Binding binding = bindingEntry.getValue(); if ("headers-test".equals(binding.getExchange()) && "bucket".equals(binding.getDestination())) { Map<String, Object> arguments = binding.getArguments(); assertEquals(3, arguments.size()); break; } } }
private void declareBindings(final Channel channel, final Binding... bindings) throws IOException { for (Binding binding : bindings) { if (this.logger.isDebugEnabled()) { this.logger.debug("Binding destination [" + binding.getDestination() + " (" + binding.getDestinationType() + ")] to exchange [" + binding.getExchange() + "] with routing key [" + binding.getRoutingKey() + "]"); } try { if (binding.isDestinationQueue()) { if (!isDeclaringImplicitQueueBinding(binding)) { channel.queueBind(binding.getDestination(), binding.getExchange(), binding.getRoutingKey(), binding.getArguments()); } } else { channel.exchangeBind(binding.getDestination(), binding.getExchange(), binding.getRoutingKey(), binding.getArguments()); } } catch (IOException e) { logOrRethrowDeclarationException(binding, "binding", e); } } }
private void declareBindings(final Channel channel, final Binding... bindings) throws IOException { for (Binding binding : bindings) { if (this.logger.isDebugEnabled()) { this.logger.debug("Binding destination [" + binding.getDestination() + " (" + binding.getDestinationType() + ")] to exchange [" + binding.getExchange() + "] with routing key [" + binding.getRoutingKey() + "]"); } try { if (binding.isDestinationQueue()) { if (!isDeclaringImplicitQueueBinding(binding)) { channel.queueBind(binding.getDestination(), binding.getExchange(), binding.getRoutingKey(), binding.getArguments()); } } else { channel.exchangeBind(binding.getDestination(), binding.getExchange(), binding.getRoutingKey(), binding.getArguments()); } } catch (IOException e) { logOrRethrowDeclarationException(binding, "binding", e); } } }
@Override @ManagedOperation(description = "Remove a binding from the broker (this operation is not available remotely)") public void removeBinding(final Binding binding) { this.rabbitTemplate.execute(channel -> { if (binding.isDestinationQueue()) { if (isRemovingImplicitQueueBinding(binding)) { return null; } channel.queueUnbind(binding.getDestination(), binding.getExchange(), binding.getRoutingKey(), binding.getArguments()); } else { channel.exchangeUnbind(binding.getDestination(), binding.getExchange(), binding.getRoutingKey(), binding.getArguments()); } return null; }); }
@Override @ManagedOperation(description = "Remove a binding from the broker (this operation is not available remotely)") public void removeBinding(final Binding binding) { this.rabbitTemplate.execute(channel -> { if (binding.isDestinationQueue()) { if (isRemovingImplicitQueueBinding(binding)) { return null; } channel.queueUnbind(binding.getDestination(), binding.getExchange(), binding.getRoutingKey(), binding.getArguments()); } else { channel.exchangeUnbind(binding.getDestination(), binding.getExchange(), binding.getRoutingKey(), binding.getArguments()); } return null; }); }
@Test public void testDirectExchange() throws Exception { DirectExchange exchange = beanFactory.getBean("direct", DirectExchange.class); assertNotNull(exchange); assertEquals("direct", exchange.getName()); assertTrue(exchange.isDurable()); assertFalse(exchange.isAutoDelete()); assertFalse(exchange.shouldDeclare()); assertEquals(2, exchange.getDeclaringAdmins().size()); Binding binding = beanFactory.getBean("org.springframework.amqp.rabbit.config.BindingFactoryBean#0", Binding.class); assertFalse(binding.shouldDeclare()); assertEquals(2, binding.getDeclaringAdmins().size()); Map<String, Object> arguments = binding.getArguments(); assertNotNull(arguments); assertEquals(1, arguments.size()); assertTrue(arguments.containsKey("x-match")); assertEquals("any", arguments.get("x-match")); }
@Test public void customBinding() { class CustomExchange extends AbstractExchange { CustomExchange(String name) { super(name); } @Override public String getType() { return "x-custom"; } } Object argumentObject = new Object(); CustomExchange customExchange = new CustomExchange("c"); String routingKey = "r"; Binding binding = BindingBuilder.// bind(queue).// to(customExchange).// with(routingKey).// and(Collections.<String, Object>singletonMap("k", argumentObject)); assertNotNull(binding); assertEquals(argumentObject, binding.getArguments().get("k")); assertEquals(customExchange.getName(), binding.getExchange()); assertEquals(Binding.DestinationType.QUEUE, binding.getDestinationType()); assertEquals(queue.getName(), binding.getDestination()); assertEquals(routingKey, binding.getRoutingKey()); }