private org.springframework.amqp.core.Message receive(RabbitTemplate template) throws Exception { int n = 0; org.springframework.amqp.core.Message message = template.receive(); while (message == null && n++ < 100) { Thread.sleep(100); message = template.receive(); } assertNotNull(message); return message; }
@Test public void testReceiveBlockingTx() throws Exception { this.template.convertAndSend(ROUTE, "blockTX"); this.template.setChannelTransacted(true); this.template.setReceiveTimeout(10000); String out = (String) this.template.receiveAndConvert(ROUTE); assertNotNull(out); assertEquals("blockTX", out); this.template.setReceiveTimeout(0); assertNull(this.template.receive(ROUTE)); }
@Test public void testGatewayPublisherConfirms() throws Exception { while (this.amqpTemplateConfirms.receive(this.queue.getName()) != null) { assertEquals(Boolean.TRUE, ack.getHeaders().get(AmqpHeaders.PUBLISH_CONFIRM)); org.springframework.amqp.core.Message received = this.amqpTemplateConfirms.receive(this.queue.getName()); assertEquals("\"hello\"", new String(received.getBody(), "UTF-8")); assertEquals("application/json", received.getMessageProperties().getContentType()); assertEquals(Boolean.TRUE, ack.getHeaders().get(AmqpHeaders.PUBLISH_CONFIRM)); while (this.amqpTemplateConfirms.receive(this.queue.getName()) != null) {
@Test public void adapterWithContentType() throws Exception { RabbitTemplate template = new RabbitTemplate(this.connectionFactory); template.setDefaultReceiveQueue(this.queue.getName()); while (template.receive() != null) { // drain } Message<?> message = MessageBuilder.withPayload("hello") .setHeader(AmqpHeaders.CONTENT_TYPE, "application/json") .build(); this.ctRequestChannel.send(message); org.springframework.amqp.core.Message m = receive(template); assertNotNull(m); assertEquals("\"hello\"", new String(m.getBody(), "UTF-8")); assertEquals("application/json", m.getMessageProperties().getContentType()); assertEquals("java.lang.String", m.getMessageProperties().getHeaders().get(JsonHeaders.TYPE_ID.replaceFirst(JsonHeaders.PREFIX, ""))); message = MessageBuilder.withPayload("hello") .build(); this.ctRequestChannel.send(message); m = receive(template); assertNotNull(m); assertEquals("hello", new String(m.getBody(), "UTF-8")); assertEquals("text/plain", m.getMessageProperties().getContentType()); while (template.receive() != null) { // drain } }
@Override @Nullable public Message receive() throws AmqpException { return this.receive(getRequiredQueue()); }
@Override @Nullable public Message receive(String queueName) { if (this.receiveTimeout == 0) { return doReceiveNoWait(queueName); } else { return receive(queueName, this.receiveTimeout); } }
@Override @Nullable public Message receive() throws AmqpException { return this.receive(getRequiredQueue()); }
@Override @Nullable public Message receive(long timeoutMillis) throws AmqpException { String queue = getRequiredQueue(); if (timeoutMillis == 0) { return doReceiveNoWait(queue); } else { return receive(queue, timeoutMillis); } }
@Override protected Message<?> doReceive(String destination) { try { org.springframework.amqp.core.Message amqpMessage = this.rabbitTemplate.receive(destination); return convertAmqpMessage(amqpMessage); } catch (RuntimeException ex) { throw convertAmqpException(ex); } }
@Override @Nullable public Object receiveAndConvert(String queueName, long timeoutMillis) throws AmqpException { Message response = timeoutMillis == 0 ? doReceiveNoWait(queueName) : receive(queueName, timeoutMillis); if (response != null) { return getRequiredMessageConverter().fromMessage(response); } return null; }
@Override @SuppressWarnings(UNCHECKED) @Nullable public <T> T receiveAndConvert(String queueName, long timeoutMillis, ParameterizedTypeReference<T> type) throws AmqpException { Message response = timeoutMillis == 0 ? doReceiveNoWait(queueName) : receive(queueName, timeoutMillis); if (response != null) { return (T) getRequiredSmartMessageConverter().fromMessage(response, type); } return null; }
@Test public void receiveAndConvert() { org.springframework.amqp.core.Message amqpMessage = createAmqpTextMessage("my Payload"); given(rabbitTemplate.receive("myQueue")).willReturn(amqpMessage); String payload = messagingTemplate.receiveAndConvert("myQueue", String.class); assertEquals("my Payload", payload); verify(rabbitTemplate).receive("myQueue"); }
@Test public void receive() { org.springframework.amqp.core.Message amqpMessage = createAmqpTextMessage(); given(rabbitTemplate.receive("myQueue")).willReturn(amqpMessage); Message<?> message = messagingTemplate.receive("myQueue"); verify(rabbitTemplate).receive("myQueue"); assertTextMessage(message); }
@Test public void receiveAndConvertWithConversion() { org.springframework.amqp.core.Message amqpMessage = createAmqpTextMessage("123"); given(rabbitTemplate.receive("myQueue")).willReturn(amqpMessage); messagingTemplate.setMessageConverter(new GenericMessageConverter()); Integer payload = messagingTemplate.receiveAndConvert("myQueue", Integer.class); assertEquals(Integer.valueOf(123), payload); verify(rabbitTemplate).receive("myQueue"); }
@Test public void receiveAndConvertDefaultDestination() { messagingTemplate.setDefaultDestination("default"); org.springframework.amqp.core.Message amqpMessage = createAmqpTextMessage("my Payload"); given(rabbitTemplate.receive("default")).willReturn(amqpMessage); String payload = messagingTemplate.receiveAndConvert(String.class); assertEquals("my Payload", payload); verify(rabbitTemplate).receive("default"); }
@Test public void testSendInGlobalTransactionRollback() throws Exception { testSendInGlobalTransactionGuts(true); assertNull(template.receive(ROUTE)); }
@Test public void receiveDefaultDestination() { messagingTemplate.setDefaultDestination("default"); org.springframework.amqp.core.Message amqpMessage = createAmqpTextMessage(); given(rabbitTemplate.receive("default")).willReturn(amqpMessage); Message<?> message = messagingTemplate.receive(); verify(rabbitTemplate).receive("default"); assertTextMessage(message); }
@Test public void receiveAndConvertNoConverter() { org.springframework.amqp.core.Message amqpMessage = createAmqpTextMessage("Hello"); given(rabbitTemplate.receive("myQueue")).willReturn(amqpMessage); thrown.expect(org.springframework.messaging.converter.MessageConversionException.class); messagingTemplate.receiveAndConvert("myQueue", Writer.class); }
@Test public void convertMessageConversionExceptionOnReceive() { org.springframework.amqp.core.Message message = createAmqpTextMessage(); MessageConverter messageConverter = mock(MessageConverter.class); willThrow(org.springframework.amqp.support.converter.MessageConversionException.class) .given(messageConverter).fromMessage(message); messagingTemplate.setAmqpMessageConverter(messageConverter); given(rabbitTemplate.receive("myQueue")).willReturn(message); thrown.expect(org.springframework.messaging.converter.MessageConversionException.class); messagingTemplate.receive("myQueue"); }