@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)); }
.toMessageProperties(i.getArgument(3), envelope, // NOSONAR magic # adapter.getEncoding())) .build()); return null; }).given(channel).basicPublish(anyString(), anyString(), anyBoolean(), any(BasicProperties.class),
.toMessageProperties(i.getArgument(3), envelope, // NOSONAR magic # adapter.getEncoding())) .build()); return null; }).given(channel).basicPublish(anyString(), anyString(), anyBoolean(), any(BasicProperties.class),
@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 ifAbsentAllAddedFluencyOnMessageBuilder() { MessageBuilder builder = MessageBuilder.withBody("foo".getBytes()); this.setAllIfAbsent(builder); MessageProperties properties = builder.build().getMessageProperties(); assertUpper(properties); }
@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")); }
@Test public void testWithRepublishRecovererExplicitExchangeAndRouting() throws Throwable { AmqpTemplate amqpTemplate = mock(AmqpTemplate.class); RetryOperationsInterceptor interceptor = RetryInterceptorBuilder.stateless() .recoverer(new RepublishMessageRecoverer(amqpTemplate, "bar", "baz")) .build(); final AtomicInteger count = new AtomicInteger(); Foo delegate = createDelegate(interceptor, count); Message message = MessageBuilder.withBody("".getBytes()).build(); delegate.onMessage("", message); assertEquals(3, count.get()); verify(amqpTemplate).send("bar", "baz", message); }
@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 ifAbsentNoneReplacedFluencyOnMessageBuilder() { MessageBuilder builder = MessageBuilder.withBody("foo".getBytes()); this.setAll(builder); this.setAllIfAbsent(builder); MessageProperties properties = builder.build().getMessageProperties(); assertLower(properties); }
@Test public void replaceAllFluencyOnMessageBuilder() { MessageBuilder builder = MessageBuilder.withBody("foo".getBytes()); this.setAllIfAbsent(builder); this.setAll(builder); MessageProperties properties = builder.build().getMessageProperties(); assertLower(properties); }
@Test public void testRequeueRecoverer() { RetryOperationsInterceptor interceptor = RetryInterceptorBuilder.stateless() .recoverer(new ImmediateRequeueMessageRecoverer()) .build(); final AtomicInteger count = new AtomicInteger(); Foo delegate = createDelegate(interceptor, count); Message message = MessageBuilder.withBody("".getBytes()).build(); try { delegate.onMessage("", message); } catch (Exception e) { assertThat(e, instanceOf(ImmediateRequeueAmqpException.class)); } assertEquals(3, count.get()); }
@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 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 testNullMPP() throws Exception { class Container extends SimpleMessageListenerContainer { @Override public void executeListener(Channel channel, Message messageIn) { super.executeListener(channel, messageIn); } } Container container = new Container(); container.setMessageListener(m -> { // NOSONAR }); container.setAfterReceivePostProcessors(m -> null); container.setConnectionFactory(mock(ConnectionFactory.class)); container.afterPropertiesSet(); container.start(); try { container.executeListener(null, MessageBuilder.withBody("foo".getBytes()).build()); fail("Expected exception"); } catch (ImmediateAcknowledgeAmqpException e) { // NOSONAR } container.stop(); }
@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());
.setReplyToAddressIfAbsent(new Address("addressxxxx")) .build()) .build(); assertNotSame(bytes, message1.getBody()); assertTrue(Arrays.equals(bytes, message1.getBody()));
@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()); }