private AbstractIntegrationMessageBuilder<?> sendAndReceive(String exchangeName, String routingKey, Message<?> requestMessage, CorrelationData correlationData) { Assert.isInstanceOf(RabbitTemplate.class, this.amqpTemplate, "RabbitTemplate implementation is required for publisher confirms"); MessageConverter converter = ((RabbitTemplate) this.amqpTemplate).getMessageConverter(); org.springframework.amqp.core.Message amqpMessage = MappingUtils.mapMessage(requestMessage, converter, getHeaderMapper(), getDefaultDeliveryMode(), isHeadersMappedLast()); addDelayProperty(requestMessage, amqpMessage); org.springframework.amqp.core.Message amqpReplyMessage = ((RabbitTemplate) this.amqpTemplate).sendAndReceive(exchangeName, routingKey, amqpMessage, correlationData); if (amqpReplyMessage == null) { return null; } return buildReply(converter, amqpReplyMessage); }
return new org.springframework.amqp.core.Message("hello".getBytes(), amqpProperties); }) .when(amqpTemplate).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), isNull()); ReflectionUtils.setField(amqpTemplateField, endpoint, amqpTemplate); requestChannel.send(message); Mockito.verify(amqpTemplate, Mockito.times(1)).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), isNull());
willAnswer(invocation -> invocation.getArgument(2)) .given(amqpTemplate) .sendAndReceive(anyString(), anyString(), any(Message.class), isNull()); endpoint.setExchangeName("foo"); endpoint.setRoutingKey("bar"); endpoint.setOutputChannel(new NullChannel()); endpoint.handleMessage(new GenericMessage<>("foo")); verify(amqpTemplate).sendAndReceive(eq("foo"), eq("bar"), captor.capture(), isNull()); assertThat(captor.getValue().getMessageProperties().getDelay(), equalTo(42)); endpoint.afterPropertiesSet(); endpoint.handleMessage(new GenericMessage<>("foo")); verify(amqpTemplate).sendAndReceive(eq("foo"), eq("baz"), captor.capture(), isNull()); assertThat(captor.getValue().getMessageProperties().getDelay(), equalTo(23));
return new org.springframework.amqp.core.Message("hello".getBytes(), amqpProperties); }) .when(amqpTemplate).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), isNull()); ReflectionUtils.setField(amqpTemplateField, endpoint, amqpTemplate); requestChannel.send(message); Mockito.verify(amqpTemplate, Mockito.times(1)).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), isNull());
@Override @Nullable public Message sendAndReceive(final String routingKey, final Message message) throws AmqpException { return sendAndReceive(routingKey, message, null); }
@Override @Nullable public Message sendAndReceive(final Message message) throws AmqpException { return sendAndReceive(message, null); }
@Override @Nullable public Message sendAndReceive(final String exchange, final String routingKey, final Message message) throws AmqpException { return sendAndReceive(exchange, routingKey, message, null); }
return new org.springframework.amqp.core.Message("hello".getBytes(), amqpProperties); }) .when(amqpTemplate).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), isNull()); ReflectionUtils.setField(amqpTemplateField, endpoint, amqpTemplate); requestChannel.send(message); Mockito.verify(amqpTemplate, Mockito.times(1)).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), isNull());
return new org.springframework.amqp.core.Message("hello".getBytes(), amqpProperties); }) .when(amqpTemplate).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), isNull()); ReflectionUtils.setField(amqpTemplateField, endpoint, amqpTemplate); requestChannel.send(message); Mockito.verify(amqpTemplate, Mockito.times(1)).sendAndReceive(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(org.springframework.amqp.core.Message.class), isNull());
@Override @Nullable protected Message<?> doSendAndReceive(String destination, Message<?> requestMessage) { try { org.springframework.amqp.core.Message amqpMessage = this.rabbitTemplate.sendAndReceive( destination, createMessage(requestMessage)); return convertAmqpMessage(amqpMessage); } catch (RuntimeException ex) { throw convertAmqpException(ex); } }
@Nullable protected Message<?> doSendAndReceive(String exchange, String routingKey, Message<?> requestMessage) { try { org.springframework.amqp.core.Message amqpMessage = this.rabbitTemplate.sendAndReceive( exchange, routingKey, createMessage(requestMessage)); return convertAmqpMessage(amqpMessage); } catch (RuntimeException ex) { throw convertAmqpException(ex); } }
@Test public void convertSendAndReceivePayload() { org.springframework.amqp.core.Message replyMessage = createAmqpTextMessage("My reply"); given(rabbitTemplate.sendAndReceive(eq("myQueue"), anyAmqpMessage())).willReturn(replyMessage); String reply = messagingTemplate.convertSendAndReceive("myQueue", "my Payload", String.class); verify(rabbitTemplate, times(1)).sendAndReceive(eq("myQueue"), anyAmqpMessage()); assertEquals("My reply", reply); }
@Test public void convertSendAndReceiveDefaultDestination() { messagingTemplate.setDefaultDestination("default"); org.springframework.amqp.core.Message replyMessage = createAmqpTextMessage("My reply"); given(rabbitTemplate.sendAndReceive(eq("default"), anyAmqpMessage())).willReturn(replyMessage); String reply = messagingTemplate.convertSendAndReceive("my Payload", String.class); verify(rabbitTemplate, times(1)).sendAndReceive(eq("default"), anyAmqpMessage()); assertEquals("My reply", reply); }
@Test public void sendAndReceive() { Message<String> request = createTextMessage(); org.springframework.amqp.core.Message reply = createAmqpTextMessage(); given(rabbitTemplate.sendAndReceive(eq("myQueue"), anyAmqpMessage())).willReturn(reply); Message<?> actual = messagingTemplate.sendAndReceive("myQueue", request); verify(rabbitTemplate, times(1)).sendAndReceive(eq("myQueue"), anyAmqpMessage()); assertTextMessage(actual); }
@Test public void amqpMessageReturned() { Message message = org.springframework.amqp.core.MessageBuilder.withBody("amqp".getBytes()) .andProperties(MessagePropertiesBuilder.newInstance().setContentType("text/plain").build()).build(); message = this.rabbitTemplate.sendAndReceive("test.amqp.message", message); assertThat(message, is(notNullValue())); assertThat(new String(message.getBody()), equalTo("AMQP")); assertThat(message.getMessageProperties().getHeaders().get("foo"), equalTo("bar")); }
@Test public void testMPPsAppliedDirectReplyToTests() { this.template.setUseDirectReplyToContainer(false); this.template.sendAndReceive(new Message("foo".getBytes(), new MessageProperties())); assertTrue("before MPP not called", this.config.beforeMppCalled); assertTrue("after MPP not called", this.config.afterMppCalled); }
@Test public void testMPPsAppliedTemporaryReplyQueueTests() { this.template.setUseDirectReplyToContainer(false); this.template.setUseTemporaryReplyQueues(true); this.template.sendAndReceive(new Message("foo".getBytes(), new MessageProperties())); assertTrue("before MPP not called", this.config.beforeMppCalled); assertTrue("after MPP not called", this.config.afterMppCalled); }
@Test public void endpointWithMessage() { MessageProperties properties = new MessageProperties(); properties.setHeader("prefix", "prefix-"); Message request = MessageTestUtils.createTextMessage("foo", properties); Message reply = rabbitTemplate.sendAndReceive("test.message", request); assertEquals("prefix-FOO", MessageTestUtils.extractText(reply)); }
@Test public void endpointWithHeader() { MessageProperties properties = new MessageProperties(); properties.setHeader("prefix", "prefix-"); Message request = MessageTestUtils.createTextMessage("foo", properties); Message reply = rabbitTemplate.sendAndReceive("test.header", request); assertEquals("prefix-FOO", MessageTestUtils.extractText(reply)); assertEquals(reply.getMessageProperties().getHeaders().get("replyMPPApplied"), Boolean.TRUE); }
@Test public void endpointWithComplexReply() { MessageProperties properties = new MessageProperties(); properties.setHeader("foo", "fooValue"); Message request = MessageTestUtils.createTextMessage("content", properties); Message reply = rabbitTemplate.sendAndReceive("test.reply", request); assertEquals("Wrong reply", "content", MessageTestUtils.extractText(reply)); assertEquals("Wrong foo header", "fooValue", reply.getMessageProperties().getHeaders().get("foo")); assertThat((String) reply.getMessageProperties().getHeaders().get("bar"), startsWith(tagPrefix)); }