Search in sources :

Example 36 with GetResponse

use of com.rabbitmq.client.GetResponse in project rabbitmq-queue-management by gessnerfl.

the class MessageMapperTest method mockResponse.

private GetResponse mockResponse(Envelope envelope, AMQP.BasicProperties basicProperties) {
    GetResponse response = mock(GetResponse.class);
    when(response.getEnvelope()).thenReturn(envelope);
    when(response.getProps()).thenReturn(basicProperties);
    when(response.getBody()).thenReturn(DEFAULT_PAYLOAD);
    return response;
}
Also used : GetResponse(com.rabbitmq.client.GetResponse)

Example 37 with GetResponse

use of com.rabbitmq.client.GetResponse in project rabbitmq-queue-management by gessnerfl.

the class MessageMapperTest method shouldMapBasicMessageFields.

@Test
public void shouldMapBasicMessageFields() {
    String checksum = "checksum";
    Envelope envelope = mock(Envelope.class);
    AMQP.BasicProperties basicProperties = mock(AMQP.BasicProperties.class);
    GetResponse getResponse = mockResponse(envelope, basicProperties);
    when(messageChecksum.createFor(basicProperties, DEFAULT_PAYLOAD)).thenReturn(checksum);
    Message result = sut.map(getResponse);
    assertEquals(DEFAULT_PAYLOAD, result.getBody());
    assertEquals(checksum, result.getChecksum());
    assertSame(envelope, result.getEnvelope());
    assertNotNull(result.getProperties());
}
Also used : Message(de.gessnerfl.rabbitmq.queue.management.model.Message) AMQP(com.rabbitmq.client.AMQP) LongString(com.rabbitmq.client.LongString) Envelope(com.rabbitmq.client.Envelope) GetResponse(com.rabbitmq.client.GetResponse) Test(org.junit.Test)

Example 38 with GetResponse

use of com.rabbitmq.client.GetResponse in project rabbitmq-queue-management by gessnerfl.

the class MessageMapperTest method shouldMapRabbitMqSpecificTypesInAmqpBasicPropertiesHeadersDeepInLists.

@Test
public void shouldMapRabbitMqSpecificTypesInAmqpBasicPropertiesHeadersDeepInLists() {
    String headerKey = "headerKey";
    String listValue = "listValue";
    List<String> list = Arrays.asList(listValue);
    Map<String, Object> headers = new HashMap<>();
    headers.put(headerKey, list);
    AMQP.BasicProperties basicProperties = mock(AMQP.BasicProperties.class);
    when(basicProperties.getHeaders()).thenReturn(headers);
    Envelope envelope = mock(Envelope.class);
    GetResponse getResponse = mockResponse(envelope, basicProperties);
    Message result = sut.map(getResponse);
    BasicProperties basicPropertiesOfResult = result.getProperties();
    assertNotNull(basicPropertiesOfResult);
    assertThat(basicPropertiesOfResult.getHeaders().keySet(), Matchers.hasSize(1));
    assertThat(basicPropertiesOfResult.getHeaders(), Matchers.hasKey(headerKey));
    assertThat(basicPropertiesOfResult.getHeaders().get(headerKey), Matchers.instanceOf(List.class));
    assertThat(((List<String>) basicPropertiesOfResult.getHeaders().get(headerKey)), Matchers.hasSize(1));
    assertThat(((List<String>) basicPropertiesOfResult.getHeaders().get(headerKey)), Matchers.contains(listValue));
}
Also used : Message(de.gessnerfl.rabbitmq.queue.management.model.Message) AMQP(com.rabbitmq.client.AMQP) BasicProperties(de.gessnerfl.rabbitmq.queue.management.model.BasicProperties) LongString(com.rabbitmq.client.LongString) Envelope(com.rabbitmq.client.Envelope) GetResponse(com.rabbitmq.client.GetResponse) Test(org.junit.Test)

Example 39 with GetResponse

use of com.rabbitmq.client.GetResponse in project rabbitmq-queue-management by gessnerfl.

the class QueueListOperation method getMessagesFromQueue.

public List<Message> getMessagesFromQueue(String brokerName, String queueName, int maxNumberOfMessages) {
    try (CloseableChannelWrapper wrapper = connector.connectAsClosable(brokerName)) {
        List<Message> messages = new ArrayList<>();
        Channel channel = wrapper.getChannel();
        channel.basicQos(DEFAULT_FETCH_COUNT);
        int fetched = 0;
        boolean messagesAvailable = true;
        Long lastDeliveryTag = null;
        while (fetched < maxNumberOfMessages && messagesAvailable) {
            GetResponse response = channel.basicGet(queueName, false);
            if (response != null) {
                messages.add(createMessage(response));
                lastDeliveryTag = response.getEnvelope().getDeliveryTag();
                fetched++;
                messagesAvailable = response.getMessageCount() > 0;
            } else {
                messagesAvailable = false;
            }
        }
        if (lastDeliveryTag != null) {
            channel.basicNack(lastDeliveryTag, true, true);
        }
        return messages;
    } catch (IOException e) {
        throw new MessageFetchFailedException(e);
    }
}
Also used : CloseableChannelWrapper(de.gessnerfl.rabbitmq.queue.management.connection.CloseableChannelWrapper) Message(de.gessnerfl.rabbitmq.queue.management.model.Message) Channel(com.rabbitmq.client.Channel) IOException(java.io.IOException) GetResponse(com.rabbitmq.client.GetResponse)

Example 40 with GetResponse

use of com.rabbitmq.client.GetResponse in project rabbitmq-queue-management by gessnerfl.

the class MessageOperationExecutor method consumeMessageApplyFunctionAndAckknowlegeOnSuccess.

public void consumeMessageApplyFunctionAndAckknowlegeOnSuccess(String brokerName, String queueName, String expectedChecksum, MessageOperationFunction fn) {
    try (CloseableChannelWrapper wrapper = connector.connectAsClosable(brokerName)) {
        Channel channel = wrapper.getChannel();
        GetResponse response = getFirstMessage(queueName, channel);
        String checksum = messageChecksum.createFor(response.getProps(), response.getBody());
        if (checksum.equals(expectedChecksum)) {
            fn.apply(channel, response);
            channel.basicAck(response.getEnvelope().getDeliveryTag(), false);
        } else {
            channel.basicNack(response.getEnvelope().getDeliveryTag(), false, true);
            throw new MessageOperationFailedException("Checksum does not match");
        }
    } catch (Exception e) {
        if (e instanceof MessageOperationFailedException) {
            throw (MessageOperationFailedException) e;
        }
        throw new MessageOperationFailedException(e);
    }
}
Also used : CloseableChannelWrapper(de.gessnerfl.rabbitmq.queue.management.connection.CloseableChannelWrapper) Channel(com.rabbitmq.client.Channel) GetResponse(com.rabbitmq.client.GetResponse) IOException(java.io.IOException)

Aggregations

GetResponse (com.rabbitmq.client.GetResponse)55 Test (org.junit.Test)27 Channel (com.rabbitmq.client.Channel)10 IOException (java.io.IOException)10 Envelope (com.rabbitmq.client.Envelope)8 Connection (com.rabbitmq.client.Connection)7 Message (de.gessnerfl.rabbitmq.queue.management.model.Message)6 HashMap (java.util.HashMap)6 AMQP (com.rabbitmq.client.AMQP)5 LongString (com.rabbitmq.client.LongString)5 BasicProperties (com.rabbitmq.client.AMQP.BasicProperties)4 BasicProperties (de.gessnerfl.rabbitmq.queue.management.model.BasicProperties)4 RMQDestination (com.rabbitmq.jms.admin.RMQDestination)3 ArrayList (java.util.ArrayList)3 HashSet (java.util.HashSet)3 List (java.util.List)3 Map (java.util.Map)3 Queue (javax.jms.Queue)3 QueueSender (javax.jms.QueueSender)3 QueueSession (javax.jms.QueueSession)3