@Test public void testRetryWithinOnMessageAdapter() throws Exception { ConnectionFactory connectionFactory = mock(ConnectionFactory.class); AbstractMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory); AmqpInboundChannelAdapter adapter = new AmqpInboundChannelAdapter(container); adapter.setOutputChannel(new DirectChannel()); adapter.setRetryTemplate(new RetryTemplate()); QueueChannel errors = new QueueChannel(); ErrorMessageSendingRecoverer recoveryCallback = new ErrorMessageSendingRecoverer(errors); recoveryCallback.setErrorMessageStrategy(new AmqpMessageHeaderErrorMessageStrategy()); adapter.setRecoveryCallback(recoveryCallback); adapter.afterPropertiesSet(); ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener(); listener.onMessage(org.springframework.amqp.core.MessageBuilder.withBody("foo".getBytes()) .andProperties(new MessageProperties()).build(), null); Message<?> errorMessage = errors.receive(0); assertNotNull(errorMessage); assertThat(errorMessage.getPayload(), instanceOf(MessagingException.class)); MessagingException payload = (MessagingException) errorMessage.getPayload(); assertThat(payload.getMessage(), containsString("Dispatcher has no")); assertThat(StaticMessageHeaderAccessor.getDeliveryAttempt(payload.getFailedMessage()).get(), equalTo(3)); org.springframework.amqp.core.Message amqpMessage = errorMessage.getHeaders() .get(AmqpMessageHeaderErrorMessageStrategy.AMQP_RAW_MESSAGE, org.springframework.amqp.core.Message.class); assertThat(amqpMessage, notNullValue()); assertNull(errors.receive(0)); }
@Test public void testRetryWithinOnMessageGateway() throws Exception { ConnectionFactory connectionFactory = mock(ConnectionFactory.class); AbstractMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory); AmqpInboundGateway adapter = new AmqpInboundGateway(container); adapter.setRequestChannel(new DirectChannel()); adapter.setRetryTemplate(new RetryTemplate()); QueueChannel errors = new QueueChannel(); ErrorMessageSendingRecoverer recoveryCallback = new ErrorMessageSendingRecoverer(errors); recoveryCallback.setErrorMessageStrategy(new AmqpMessageHeaderErrorMessageStrategy()); adapter.setRecoveryCallback(recoveryCallback); adapter.afterPropertiesSet(); ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener(); listener.onMessage(org.springframework.amqp.core.MessageBuilder.withBody("foo".getBytes()) .andProperties(new MessageProperties()).build(), null); Message<?> errorMessage = errors.receive(0); assertNotNull(errorMessage); assertThat(errorMessage.getPayload(), instanceOf(MessagingException.class)); MessagingException payload = (MessagingException) errorMessage.getPayload(); assertThat(payload.getMessage(), containsString("Dispatcher has no")); assertThat(StaticMessageHeaderAccessor.getDeliveryAttempt(payload.getFailedMessage()).get(), equalTo(3)); org.springframework.amqp.core.Message amqpMessage = errorMessage.getHeaders() .get(AmqpMessageHeaderErrorMessageStrategy.AMQP_RAW_MESSAGE, org.springframework.amqp.core.Message.class); assertThat(amqpMessage, notNullValue()); assertNull(errors.receive(0)); }
Envelope envelope = new Envelope(1, false, "", REPLY_QUEUE); reply.set(MessageBuilder.withBody(i.getArgument(4)) // NOSONAR magic # .andProperties(getMessagePropertiesConverter() .toMessageProperties(i.getArgument(3), envelope, // NOSONAR magic # adapter.getEncoding()))
Envelope envelope = new Envelope(1, false, "", REPLY_QUEUE); reply.set(MessageBuilder.withBody(i.getArgument(4)) // NOSONAR magic # .andProperties(getMessagePropertiesConverter() .toMessageProperties(i.getArgument(3), envelope, // NOSONAR magic # adapter.getEncoding()))
@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 messagingMessageReturned() { Message message = org.springframework.amqp.core.MessageBuilder.withBody("\"messaging\"".getBytes()) .andProperties(MessagePropertiesBuilder.newInstance().setContentType("application/json").build()).build(); message = this.rabbitTemplate.sendAndReceive("test.messaging.message", message); assertThat(message, is(notNullValue())); assertThat(new String(message.getBody()), equalTo("{\"field\":\"MESSAGING\"}")); assertThat(message.getMessageProperties().getHeaders().get("foo"), equalTo("bar")); }
@RabbitListener(queues = "test.amqp.message") public Message amqpMessage(String in) { return org.springframework.amqp.core.MessageBuilder.withBody(in.toUpperCase().getBytes()) .andProperties(MessagePropertiesBuilder.newInstance().setContentType("text/plain") .setHeader("foo", "bar") .build()) .build(); }
@Test public void genericMessageTest1() throws Exception { org.springframework.amqp.core.Message message = MessageTestUtils.createTextMessage("\"foo\""); Channel channel = mock(Channel.class); MessagingMessageListenerAdapter listener = getSimpleInstance("withGenericMessageAnyType", Message.class); listener.setMessageConverter(new Jackson2JsonMessageConverter()); message.getMessageProperties().setContentType("application/json"); listener.onMessage(message, channel); assertEquals(String.class, this.sample.payload.getClass()); message = org.springframework.amqp.core.MessageBuilder .withBody("{ \"foo\" : \"bar\" }".getBytes()) .andProperties(message.getMessageProperties()) .build(); listener.onMessage(message, channel); assertEquals(LinkedHashMap.class, this.sample.payload.getClass()); }
@Test public void fromBodyAndMessageRange() { byte[] bytes = "foobar".getBytes(); Message message1 = MessageBuilder.withBody(bytes, 2, 5) .andProperties(this.setAll(MessagePropertiesBuilder.newInstance()) .build()) .build(); assertTrue(Arrays.equals("oba".getBytes(), message1.getBody())); Message message2 = MessageBuilder.fromClonedMessage(message1).build(); assertNotSame(message1.getBody(), message2.getBody()); assertTrue(Arrays.equals(message1.getBody(), message2.getBody())); assertEquals(message1.getMessageProperties(), message2.getMessageProperties()); }
@Test public void copyProperties() { byte[] bytes = "foo".getBytes(); Message message1 = MessageBuilder.withBody(bytes) .andProperties(this.setAll(MessagePropertiesBuilder.newInstance()) .setReplyTo("replyTo") .build()) .build(); assertSame(bytes, message1.getBody()); Message message2 = MessageBuilder.withBody("bar".getBytes()) .copyProperties(message1.getMessageProperties()) .build(); assertNotSame(message1.getMessageProperties(), message2.getMessageProperties()); assertEquals(message1.getMessageProperties(), message2.getMessageProperties()); Message message3 = MessageBuilder.withBody("bar".getBytes()) .copyProperties(message1.getMessageProperties()) .removeHeader("foo") .build(); assertEquals(2, message3.getMessageProperties().getHeaders().size()); Message message4 = MessageBuilder.withBody("bar".getBytes()) .copyProperties(message1.getMessageProperties()) .removeHeaders() .build(); assertEquals(0, message4.getMessageProperties().getHeaders().size()); }
properties.setDelay(500); template.send(exchangeName, queue.getName(), MessageBuilder.withBody("foo".getBytes()).andProperties(properties).build()); long t1 = System.currentTimeMillis(); Message received = template.receive(queue.getName());
Address replyTo = new Address("address"); Message message1 = MessageBuilder.withClonedBody(bytes) .andProperties(this.setAll(MessagePropertiesBuilder.fromClonedProperties(properties)) .setReplyToAddress(replyTo) .setReplyToAddressIfAbsent(new Address("addressxxxx"))
@Test public void fromBodyAndMessage() { byte[] bytes = "foo".getBytes(); MessageProperties properties = this.setAll(MessagePropertiesBuilder.newInstance()) .setReplyTo("replyTo") .setReplyToIfAbsent("foo") .build(); Message message1 = MessageBuilder.withBody(bytes) .andProperties(properties) .build(); assertSame(bytes, message1.getBody()); assertEquals("replyTo", message1.getMessageProperties().getReplyTo()); Message message2 = MessageBuilder.fromMessage(message1) .setReplyTo("foo") .build(); assertSame(bytes, message2.getBody()); assertNotSame(message1.getMessageProperties(), message2.getMessageProperties()); assertEquals(message1.getMessageProperties(), MessageBuilder.fromMessage(message2).setReplyTo("replyTo").build().getMessageProperties()); assertEquals("foo", message2.getMessageProperties().getReplyTo()); Message message3 = MessageBuilder.fromClonedMessage(message1) .setReplyToIfAbsent("foo") .build(); assertEquals("replyTo", message3.getMessageProperties().getReplyTo()); Message message4 = MessageBuilder.fromClonedMessage(message1) .setReplyTo(null) .setReplyToIfAbsent("foo") .build(); assertEquals("foo", message4.getMessageProperties().getReplyTo()); }