@Override public void enqueue(PriorityMessage item) { template.send("", name, item); }
AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(amqpTemplate); willDoNothing() .given(amqpTemplate).send(anyString(), anyString(), any(Message.class), isNull()); willAnswer(invocation -> invocation.getArgument(2)) .given(amqpTemplate) endpoint.handleMessage(new GenericMessage<>("foo")); ArgumentCaptor<Message> captor = ArgumentCaptor.forClass(Message.class); verify(amqpTemplate).send(eq("foo"), eq("bar"), captor.capture(), isNull()); assertThat(captor.getValue().getMessageProperties().getDelay(), equalTo(42)); endpoint.setExpectReply(true);
private void send(String exchangeName, String routingKey, final Message<?> requestMessage, CorrelationData correlationData) { if (this.amqpTemplate instanceof RabbitTemplate) { MessageConverter converter = ((RabbitTemplate) this.amqpTemplate).getMessageConverter(); org.springframework.amqp.core.Message amqpMessage = MappingUtils.mapMessage(requestMessage, converter, getHeaderMapper(), getDefaultDeliveryMode(), isHeadersMappedLast()); addDelayProperty(requestMessage, amqpMessage); ((RabbitTemplate) this.amqpTemplate).send(exchangeName, routingKey, amqpMessage, correlationData); } else { this.amqpTemplate.convertAndSend(exchangeName, routingKey, requestMessage.getPayload(), message -> { getHeaderMapper().fromHeadersToRequest(requestMessage.getHeaders(), message.getMessageProperties()); return message; }); } }
@SuppressWarnings("rawtypes") @Test public void amqpOutboundChannelAdapterWithinChain() { Object eventDrivenConsumer = context.getBean("chainWithRabbitOutbound"); List chainHandlers = TestUtils.getPropertyValue(eventDrivenConsumer, "handler.handlers", List.class); AmqpOutboundEndpoint endpoint = (AmqpOutboundEndpoint) chainHandlers.get(0); assertNull(TestUtils.getPropertyValue(endpoint, "defaultDeliveryMode")); Field amqpTemplateField = ReflectionUtils.findField(AmqpOutboundEndpoint.class, "amqpTemplate"); amqpTemplateField.setAccessible(true); RabbitTemplate amqpTemplate = TestUtils.getPropertyValue(endpoint, "amqpTemplate", RabbitTemplate.class); amqpTemplate = Mockito.spy(amqpTemplate); Mockito.doAnswer(invocation -> { Object[] args = invocation.getArguments(); org.springframework.amqp.core.Message amqpMessage = (org.springframework.amqp.core.Message) args[2]; MessageProperties properties = amqpMessage.getMessageProperties(); assertEquals("hello", new String(amqpMessage.getBody())); assertEquals(MessageDeliveryMode.PERSISTENT, properties.getDeliveryMode()); return null; }) .when(amqpTemplate).send(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), Mockito.any(CorrelationData.class)); ReflectionUtils.setField(amqpTemplateField, endpoint, amqpTemplate); MessageChannel requestChannel = context.getBean("amqpOutboundChannelAdapterWithinChain", MessageChannel.class); Message<?> message = MessageBuilder.withPayload("hello").build(); requestChannel.send(message); Mockito.verify(amqpTemplate, Mockito.times(1)).send(Mockito.any(String.class), isNull(), Mockito.any(org.springframework.amqp.core.Message.class), isNull()); }
@Test public void testHeaderMapperWinsAdapter() { ConnectionFactory connectionFactory = mock(ConnectionFactory.class); RabbitTemplate amqpTemplate = spy(new RabbitTemplate(connectionFactory)); AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(amqpTemplate); endpoint.setHeadersMappedLast(true); final AtomicReference<Message> amqpMessage = new AtomicReference<Message>(); willAnswer(invocation -> { amqpMessage.set(invocation.getArgument(2)); return null; }).given(amqpTemplate).send(isNull(), isNull(), any(Message.class), isNull()); org.springframework.messaging.Message<?> message = MessageBuilder.withPayload("foo") .setHeader(MessageHeaders.CONTENT_TYPE, "bar") .build(); endpoint.handleMessage(message); assertNotNull(amqpMessage.get()); assertEquals("bar", amqpMessage.get().getMessageProperties().getContentType()); }
assertEquals("bar", properties.getHeaders().get("bar")); return null; }).when(amqpTemplate).send(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(Message.class), isNull()); ReflectionUtils.setField(amqpTemplateField, gateway, amqpTemplate); listener.onMessage(amqpMessage, null); Mockito.verify(amqpTemplate, Mockito.times(1)).send(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(Message.class), isNull());
return null; }) .when(amqpTemplate).send(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), Mockito.any(CorrelationData.class)); ReflectionUtils.setField(amqpTemplateField, endpoint, amqpTemplate); .build(); requestChannel.send(message); Mockito.verify(amqpTemplate, Mockito.times(1)).send(anyString(), isNull(), Mockito.any(org.springframework.amqp.core.Message.class), isNull());
return null; }).when(rabbitTemplate) .send(anyString(), anyString(), any(org.springframework.amqp.core.Message.class), isNull());
@Override public void convertAndSend(String exchange, String routingKey, final Object object, @Nullable CorrelationData correlationData) throws AmqpException { send(exchange, routingKey, convertMessageIfNecessary(object), correlationData); }
@Override public void convertAndSend(String exchange, String routingKey, final Object message, final MessagePostProcessor messagePostProcessor, @Nullable CorrelationData correlationData) throws AmqpException { Message messageToSend = convertMessageIfNecessary(message); messageToSend = messagePostProcessor.postProcessMessage(messageToSend, correlationData); send(exchange, routingKey, messageToSend, correlationData); }
protected void doSend(String exchange, String routingKey, Message<?> message) { try { this.rabbitTemplate.send(exchange, routingKey, createMessage(message)); } catch (RuntimeException ex) { throw convertAmqpException(ex); } }
@Override protected void doSend(String destination, Message<?> message) { try { this.rabbitTemplate.send(destination, createMessage(message)); } catch (RuntimeException ex) { throw convertAmqpException(ex); } }
private synchronized void releaseBatches() { for (MessageBatch batch : this.batchingStrategy.releaseBatches()) { super.send(batch.getExchange(), batch.getRoutingKey(), batch.getMessage(), null); } }
private static void sendMessages(RabbitTemplate template, final String exchange, final String routingKey, int numMessages) { for (int i = 1; i <= numMessages; i++) { byte[] bytes = "testing".getBytes(); MessageProperties properties = new MessageProperties(); properties.getHeaders().put("float", 3.14f); Message message = new Message(bytes, properties); template.send(exchange, routingKey, message); System .out .println("sending " + i + "..."); } }
@Test public void convertAndSendPayloadExchange() { messagingTemplate.convertAndSend("myExchange", "myQueue", "my Payload"); verify(rabbitTemplate).send(eq("myExchange"), eq("myQueue"), amqpMessage.capture()); assertEquals("my Payload", MessageTestUtils.extractText(amqpMessage.getValue())); }
@Test public void convertAndSendPayload() { messagingTemplate.convertAndSend("myQueue", "my Payload"); verify(rabbitTemplate).send(eq("myQueue"), amqpMessage.capture()); assertEquals("my Payload", MessageTestUtils.extractText(amqpMessage.getValue())); }
@Test public void send() { Message<String> message = createTextMessage(); messagingTemplate.send("myQueue", message); verify(rabbitTemplate).send(eq("myQueue"), this.amqpMessage.capture()); assertTextMessage(this.amqpMessage.getValue()); }
@Test public void sendDefaultDestination() { messagingTemplate.setDefaultDestination("default"); Message<String> message = createTextMessage(); messagingTemplate.send(message); verify(rabbitTemplate).send(eq("default"), this.amqpMessage.capture()); assertTextMessage(this.amqpMessage.getValue()); }
@Test public void convertAndSendDefaultDestination() { messagingTemplate.setDefaultDestination("default"); messagingTemplate.convertAndSend("my Payload"); verify(rabbitTemplate).send(eq("default"), amqpMessage.capture()); assertEquals("my Payload", MessageTestUtils.extractText(amqpMessage.getValue())); }
@Test public void sendPropertyInjection() { RabbitMessagingTemplate t = new RabbitMessagingTemplate(); t.setRabbitTemplate(rabbitTemplate); t.setDefaultDestination("myQueue"); t.afterPropertiesSet(); Message<String> message = createTextMessage(); t.send(message); verify(rabbitTemplate).send(eq("myQueue"), this.amqpMessage.capture()); assertTextMessage(this.amqpMessage.getValue()); }