RabbitMQ. Получение сообщений и их данных#

Полезные ссылки:

Получение сообщений#

import java.util.List;

import com.rabbitmq.client.GetResponse;

import static java.time.Duration.ofSeconds;
import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;
import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.GetResponseSupplier.responses;

public class MyTest {

    @Test
    public void myTest() {
        //получение сообщений целиком  
        List<GetResponse> result = rabbitMq().read(response("test_queue") //название очереди
                //Параметр необязательный. Если его не указывать, будет использовано значение
                //свойства RABBIT_MQ_DEFAULT_QUEUE_NAME
                .autoAck() //можно указать, что auto acknowledge
                //опции, уточняющие результат
                //
        );
    }
}
Уточняющие параметры шага, который возвращает лист. Шаг предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//каждый элемент результирующего листа.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "каждый элемент, который попадет в результирующий лист", item -> {
    /*предикат, как работает критерий*/
})
//-------------------------------------------
// можно указать время,
// за которое нужные элементы должны быть получены
.timeOut(ofSeconds(5))
//-------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если непустой лист не удалось получить (не было ни одного элемента,
//который бы соответствовал перечисленным критериям,
// или непустой лист просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//-------------------------------------------
//1. можно указать сколько объектов,
//которые соответствуют критериям,
//нужно вернуть
.returnListOfSize(3)
//-------------------------------------------
//2. можно указать, до элемента с каким индексом
//нужно собрать результирующие элементы,
//индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnBeforeIndex(7)
//.returnAfterIndex(8) либо после какого элемента
//----------------------------------------------
//3. Либо можно перечислить индексы элементов,
// которые следует вернуть.
//Индексы - индексы объектов в наборе элементов,
//которые соответствуют критериям
.returnItemsOfIndexes(0, 3, 5)
//-----------------------------------------------
//4. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireSize(isEqual(8))
//----------------------------------------------
//5. можно указать, при достижении каких условий,
//которым должен соответствовать лист ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий лист/суб-лист
.returnOnCondition("Описание условия", list -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь суб-лист подходящих по критериям элементов,
// который должен вернуться как результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием

Данные сообщений RabbitMQ, собранные в лист#

import java.util.List;

import com.rabbitmq.client.GetResponse;

import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;
import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.GetResponseSupplier.responses;

public class MyTest {

    @Test
    public void myTest() {
        List<SomeData> someDataList = rabbitMq().read(response(/*параметры*/)
                //опции, уточняющие результат
                //
                .thenGetList(
                    "Описание / название результирующего листа", //описание того ЧТО следует получить,
                    //в свободной форме или бизнес
                    //терминологии
                    getResponse -> {
                        //Алгоритм функции, которая получает данные
                        //из каждого сообщения
                        return someDataObject; //эти объекты
                        //будут собраны в результирующий лист
                    }
                )
                //опции, уточняющие результат
                //
        );
    }
}
Уточняющие параметры шага, который возвращает лист. Шаг не предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//каждый элемент результирующего листа.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "каждый элемент, который попадет в результирующий лист", item -> {
    /*предикат, как работает критерий*/
})
//-------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если непустой лист не удалось получить (не было ни одного элемента,
//который бы соответствовал перечисленным критериям,
// или непустой лист просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//-------------------------------------------
//1. можно указать сколько объектов,
//которые соответствуют критериям,
//нужно вернуть
.returnListOfSize(3)
//-------------------------------------------
//2. можно указать, до элемента с каким индексом
//нужно собрать результирующие элементы,
//индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnBeforeIndex(7)
//.returnAfterIndex(8) либо после какого элемента
//----------------------------------------------
//3. Либо можно перечислить индексы элементов,
// которые следует вернуть.
//Индексы - индексы объектов в наборе элементов,
//которые соответствуют критериям
.returnItemsOfIndexes(0, 3, 5)
//-------------------------------------------
//4. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireSize(isEqual(8))
//-------------------------------------------
//5. можно указать, при достижении каких условий,
//которым должен соответствовать лист ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий лист/суб-лист
.returnOnCondition("Описание условия", list -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь суб-лист подходящих по критериям элементов,
// который должен вернуться как результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием
import java.util.List;

import com.rabbitmq.client.GetResponse;

import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;
import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.GetResponseSupplier.responses;

public class MyTest {

    @Test
    public void myTest() {
        List<SomeData> someDataList = rabbitMq().read(response(/*параметры*/)
                //опции, уточняющие результат
                //
                .thenGetList(
                    "Описание / название результирующего листа", //описание того ЧТО следует получить,
                    //в свободной форме или бизнес
                    //терминологии
                    SomeBodyClass.class, //Класс, в объект которого 
                    // десериализуется тело каждого сообщения.
                    // Так же можно использовать объект 
                    // com.fasterxml.jackson.core.type.TypeReference
                    //
                    // Функция, с помощью которой извлекаются данные
                    // из десериализованного тела сообщения.
                    // Она не обязательная. Если ее не указывать,
                    // то вернется объект List<SomeBodyClass>.
                    someBodyObject -> {
                        //Алгоритм функции, которая получает данные
                        //из каждого десериализованного тела сообщения
                        return someDataObject; //эти объекты
                        //будут собраны в результирующий лист
                    }
                )
                // Указывается объект класса 
                // ru.tinkoff.qa.neptune.core.api.data.format.DataTransformer,
                // c помощью которого десериализуется тело каждого сообщения.
                // Вызов метода необязателен. По умолчанию используется
                // значение свойства RABBIT_MQ_DEFAULT_DATA_TRANSFORMER
                .withDataTransformer(new CustomDataTransformer())
                //опции, уточняющие результат
                //
        );
    }
}

Объект данных из сообщений RabbitMQ#

import java.util.List;

import com.rabbitmq.client.GetResponse;

import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;
import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.GetResponseSupplier.responses;

public class MyTest {

    @Test
    public void myTest() {
        SomeData someData = rabbitMq().read(response(/*параметры*/)
                //опции, уточняющие результат
                //
                .thenGetItem(
                    "Описание / название результирующего объекта", //описание того 
                    // ЧТО следует получить,
                    //в свободной форме или бизнес
                    //терминологии
                    getResponse -> {
                        //Алгоритм функции, которая получает данные
                        //из каждого сообщения
                        return someDataObject; //один из этих 
                        //объектов возвращается как результат,
                        //первый попавшийся или с учетом уточнений
                })
                //опции, уточняющие результат
                //
        );
    }
}
Уточняющие параметры шага, который возвращает элемент Iterable. Шаг не предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//результирующий элемент из набора.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "результирующий элемент из набора", item -> {
    /*предикат, как работает критерий*/
})
//------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если не был получен результирующий элемент (не было ни одного элемента,
//который бы соответствовал перечисленным критериям,
// или непустой набор просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//------------------------------------------
//1. Можно указать индекс элемента, который следует вернуть.
//Индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnItemOfIndex(1)
//-----------------------------------------------
//2. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireSize(isEqual(8))
//------------------------------------------
//3. можно указать, при достижении каких условий,
//которым должен соответствовать набор ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий элемент
.returnOnCondition("Описание условия", iterable -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь набор подходящих по критериям элементов,
// из которого должен быть взят результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием
import java.util.List;

import com.rabbitmq.client.GetResponse;

import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;
import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.GetResponseSupplier.responses;

public class MyTest {

    @Test
    public void myTest() {
        SomeData someData = rabbitMq().read(response(/*параметры*/)
                //опции, уточняющие результат
                //
                .thenGetItem(
                    "Описание / название результирующего объекта", //описание того 
                    // ЧТО следует получить,
                    //в свободной форме или бизнес
                    //терминологии
                    SomeBodyClass.class, //Класс, в объект которого 
                    // десериализуется тело каждого сообщения.
                    // Так же можно использовать объект 
                    // com.fasterxml.jackson.core.type.TypeReference
                    //
                    // Функция, с помощью которой извлекаются данные
                    // из десериализованного тела сообщения.
                    // Она не обязательная. Если ее не указывать,
                    // то вернется объект SomeBodyClass.
                    someBodyObject -> {
                        //Алгоритм функции, которая получает данные
                        //из каждого десериализованного тела сообщения
                        return someDataObject; //один из этих 
                        //объектов возвращается как результат,
                        //первый попавшийся или с учетом уточнений
                    }
                )
                // Указывается объект класса 
                // ru.tinkoff.qa.neptune.core.api.data.format.DataTransformer,
                // c помощью которого десериализуется тело каждого сообщения.
                // Вызов метода необязателен. По умолчанию используется
                // значение свойства RABBIT_MQ_DEFAULT_DATA_TRANSFORMER
                .withDataTransformer(new CustomDataTransformer())
                //опции, уточняющие результат
                //
        );
    }
}

Получение данных сообщений#

Отличие от примеров выше в том, что здесь нет промежуточного действия в виде получения сообщений, из которых извлекаются данные. Данные получаются как бы напрямую.

Получение данных сообщений RabbitMQ как Java-объект#

import static java.time.Duration.ofSeconds;
import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;
import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.RabbitMqBasicGetIterableItemSupplier.*;

public class MyTest {

    @Test
    public void myTest() {
        SomeData result = rabbitMq().read(rabbitIterableItem(
                "Описание / название результирующего объекта", //описание того 
                // ЧТО следует получить,
                //в свободной форме или бизнес
                //терминологии
                "test_queue",  //Название очереди
                //Параметр необязательный. Если его не указывать, будет использовано значение
                //свойства RABBIT_MQ_DEFAULT_QUEUE_NAME
                SomeBodyClass.class, //Класс, в объект которого 
                // десериализуется тело каждого сообщения.
                // Так же можно использовать объект 
                // com.fasterxml.jackson.core.type.TypeReference
                //
                // Функция, с помощью которой извлекаются данные
                // из десериализованного тела сообщения.
                // Она не обязательная. Если ее не указывать,
                // то вернется объект SomeBodyClass.
                someBodyObject -> {
                    //Алгоритм функции, которая получает данные
                    //из каждого десериализованного тела сообщения
                    return someDataObject; //один из этих 
                    //объектов возвращается как результат,
                    //первый попавшийся или с учетом уточнений
                })
                // Указывается объект класса 
                // ru.tinkoff.qa.neptune.core.api.data.format.DataTransformer,
                // c помощью которого десериализуется тело каждого сообщения.
                // Вызов метода необязателен. По умолчанию используется
                // значение свойства RABBIT_MQ_DEFAULT_DATA_TRANSFORMER
                .withDataTransformer(new CustomDataTransformer())
                //можно указать, что auto acknowledge
                .autoAck()
                //опции, уточняющие результат
                //
        );
    }
}
Уточняющие параметры шага, который возвращает элемент Iterable. Шаг предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//результирующий элемент из набора.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "результирующий элемент из набора", item -> {
    /*предикат, как работает критерий*/
})
//------------------------------------------
// можно указать время,
// за которое нужные элемент должен быть получен
.timeOut(ofSeconds(5))
//------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если не был получен результирующий элемент (не было ни одного элемента,
//который бы соответствовал перечисленным критериям,
// или непустой набор просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//------------------------------------------
//1. Можно указать индекс элемента, который следует вернуть.
//Индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnItemOfIndex(1)
//-----------------------------------------------
//2. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireSize(isEqual(8))
//------------------------------------------
//3. можно указать, при достижении каких условий,
//которым должен соответствовать набор ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий элемент
.returnOnCondition("Описание условия", iterable -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь набор подходящих по критериям элементов,
// из которого должен быть взят результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием

Ниже пример, как можно получить текст одного из прочитанных сообщений

import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;
import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.RabbitMqBasicGetIterableItemSupplier.*;

public class MyTest {

    @Test
    public void myTest() {
        // Возвращает сообщение из очереди.
        String result = rabbitMq().read(rabbitRawMessage(
                "queue", //Название очереди
                //Параметр необязательный. Если его не указывать, будет использовано значение
                //свойства RABBIT_MQ_DEFAULT_QUEUE_NAME
                UTF_8) //Кодировка, параметр необязательный
                //можно указать, что auto acknowledge
                .autoAck()
                //опции, уточняющие результат,
                //
        );
    }
}

Получение данных сообщений RabbitMQ, собранных в лист#

import java.util.List;

import static java.time.Duration.ofSeconds;
import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;
import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.RabbitMqBasicGetIterableSupplier.*;

public class MyTest {

  @Test
  public void myTest() {
    List<SomeData> result = rabbitMq().read(rabbitIterable(
            "Описание / название результирующего листа", //описание того ЧТО следует получить,
            //в свободной форме или бизнес
            //терминологии
            "test_queue", //Название очереди
            //Параметр необязательный. Если его не указывать, будет использовано значение
            //свойства RABBIT_MQ_DEFAULT_QUEUE_NAME
            SomeBodyClass.class, //Класс, в объект которого 
            // десериализуется тело каждого сообщения.
            // Так же можно использовать объект 
            // com.fasterxml.jackson.core.type.TypeReference
            //
            // Функция, с помощью которой извлекаются данные
            // из десериализованного тела сообщения.
            // Она не обязательная. Если ее не указывать,
            // то вернется объект List<SomeBodyClass>.
            someBodyObject -> {
                //Алгоритм функции, которая получает данные
                //из каждого десериализованного тела сообщения
                return someDataObject; //эти объекты
                //будут собраны в результирующий лист
            })
            // Указывается объект класса 
            // ru.tinkoff.qa.neptune.core.api.data.format.DataTransformer,
            // c помощью которого десериализуется тело каждого сообщения.
            // Вызов метода необязателен. По умолчанию используется
            // значение свойства RABBIT_MQ_DEFAULT_DATA_TRANSFORMER
            .withDataTransformer(new CustomDataTransformer())
            //можно указать, что auto acknowledge
            .autoAck()
            //опции, уточняющие результат
            //
        );
    }
}
Уточняющие параметры шага, который возвращает лист. Шаг предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//каждый элемент результирующего листа.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "каждый элемент, который попадет в результирующий лист", item -> {
    /*предикат, как работает критерий*/
})
//-------------------------------------------
// можно указать время,
// за которое нужные элементы должны быть получены
.timeOut(ofSeconds(5))
//-------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если непустой лист не удалось получить (не было ни одного элемента,
//который бы соответствовал перечисленным критериям,
// или непустой лист просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//-------------------------------------------
//1. можно указать сколько объектов,
//которые соответствуют критериям,
//нужно вернуть
.returnListOfSize(3)
//-------------------------------------------
//2. можно указать, до элемента с каким индексом
//нужно собрать результирующие элементы,
//индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnBeforeIndex(7)
//.returnAfterIndex(8) либо после какого элемента
//----------------------------------------------
//3. Либо можно перечислить индексы элементов,
// которые следует вернуть.
//Индексы - индексы объектов в наборе элементов,
//которые соответствуют критериям
.returnItemsOfIndexes(0, 3, 5)
//-----------------------------------------------
//4. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireSize(isEqual(8))
//----------------------------------------------
//5. можно указать, при достижении каких условий,
//которым должен соответствовать лист ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий лист/суб-лист
.returnOnCondition("Описание условия", list -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь суб-лист подходящих по критериям элементов,
// который должен вернуться как результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием

Ниже пример, как можно получить тексты прочитанных сообщений

import java.util.List;

import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;
import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.RabbitMqBasicGetIterableSupplier.*;

public class MyTest {

  @Test
  public void myTest() {
      // Возвращает сообщения из очереди.
      List<String> result = rabbitMq().read(rabbitIterableOfRawMessages(
              "queue", //Название очереди
              //Параметр необязательный. Если его не указывать, будет использовано значение
              //свойства RABBIT_MQ_DEFAULT_QUEUE_NAME
              UTF_8) //Кодировка, параметр необязательный
              //можно указать, что auto acknowledge
              .autoAck()
          //опции, уточняющие результат,
          //
      );
  }
}

Получение данных сообщений RabbitMQ, собранных в массив#

import static java.time.Duration.ofSeconds;
import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;

import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.RabbitMqBasicGetArraySupplier.*;

public class MyTest {

  @Test
  public void myTest() {
      ArrayItemClass[] result = rabbitMq().read(rabbitArray(
            "Описание / название результирующего массива", //описание того ЧТО следует получить,
            //в свободной форме или бизнес
            //терминологии
            "test_queue", //Название очереди
            //Параметр необязательный. Если его не указывать, будет использовано значение
            //свойства RABBIT_MQ_DEFAULT_QUEUE_NAME
            SomeBodyClass.class, //Класс, в объект которого 
            // десериализуется тело каждого сообщения.
            // Так же можно использовать объект 
            // com.fasterxml.jackson.core.type.TypeReference
            //
            ArrayItemClass.class, //Класс каждого элемента получаемого массива
            // Параметр обязателен, если из каждого десериализованного
            // тела сообщения нужно получить какие-то данные,
            // из которых будет собран результирующий массив.
            // Получение этих данных описывается функцией ниже.
            //
            // Функция, с помощью которой извлекаются данные
            // из десериализованного тела сообщения.
            // Она не обязательная. Если ее не указывать,
            // то вернется объект SomeBodyClass[]
            someBodyObject -> {
                //Алгоритм функции, которая получает данные
                //из каждого десериализованного тела сообщения
                return someArrayItemObject; //эти объекты
                //будут собраны в результирующий массив
            })
            // Указывается объект класса 
            // ru.tinkoff.qa.neptune.core.api.data.format.DataTransformer,
            // c помощью которого десериализуется тело каждого сообщения.
            // Вызов метода необязателен. По умолчанию используется
            // значение свойства RABBIT_MQ_DEFAULT_DATA_TRANSFORMER
            .withDataTransformer(new CustomDataTransformer())
            //можно указать, что auto acknowledge
            .autoAck()
            //опции, уточняющие результат,
            //
      );
  }
}
Уточняющие параметры шага, который возвращает массив. Шаг предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//каждый элемент результирующего массива.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "каждый элемент, который попадет в результирующий массив", item -> {
    /*предикат, как работает критерий*/
})
//----------------------------------------------
// можно указать время,
// за которое нужные элементы должны быть получены
.timeOut(ofSeconds(5))
//----------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если непустой массив не удалось получить (не было ни одного элемента,
//который бы соответствовал перечисленным критериям,
// или непустой массив просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//----------------------------------------------
//1. можно указать сколько объектов,
//которые соответствуют критериям,
//нужно вернуть
.returnArrayOfLength(3)
//-------------------------------------------
//2. можно указать, до элемента с каким индексом
//нужно собрать результирующие элементы,
//индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnBeforeIndex(7)
//.returnAfterIndex(8) либо после какого элемента
//----------------------------------------------
//3. Либо можно перечислить индексы элементов,
// которые следует вернуть.
//Индексы - индексы объектов в наборе элементов,
//которые соответствуют критериям
.returnItemsOfIndexes(0, 3, 5)
//-----------------------------------------------
//4. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireLength(isEqual(8))
//----------------------------------------------
//5. можно указать, при достижении каких условий,
//которым должен соответствовать массив ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий массив/суб-массив
.returnOnCondition("Описание условия", array -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь суб-массив подходящих по критериям элементов,
// который должен вернуться как результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием

Ниже пример, как можно получить тексты прочитанных сообщений в виде массива

import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;

import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.RabbitMqBasicGetArraySupplier.*;

public class MyTest {

  @Test
  public void myTest() {
      // Возвращает сообщения из очереди.
      String[] result = rabbitMq().read(rabbitArrayOfRawMessages(
              "queue", //Название очереди
              //Параметр необязательный. Если его не указывать, будет использовано значение
              //свойства RABBIT_MQ_DEFAULT_QUEUE_NAME
              UTF_8) //Кодировка, параметр необязательный
              //можно указать, что auto acknowledge
              .autoAck()
          //опции, уточняющие результат,
          //
      );
  }
}

Получение данных сообщений RabbitMQ как элемент массива#

import static java.time.Duration.ofSeconds;
import static ru.tinkoff.qa.neptune.rabbit.mq.RabbitMqStepContext.rabbitMq;

import static ru.tinkoff.qa.neptune.rabbit.mq.function.get.RabbitMqBasicGetArrayItemSupplier.*;

public class MyTest {

  @Test
  public void myTest() {
      ArrayItemClass result = rabbitMq().read(rabbitArrayItem(
            "Описание / название результирующего элемента массива", //описание того ЧТО следует получить,
            //в свободной форме или бизнес
            //терминологии
            "test_queue", //Название очереди
            //Параметр необязательный. Если его не указывать, будет использовано значение
            //свойства RABBIT_MQ_DEFAULT_QUEUE_NAME
            SomeBodyClass.class, //Класс, в объект которого 
            // десериализуется тело каждого сообщения.
            // Так же можно использовать объект 
            // com.fasterxml.jackson.core.type.TypeReference
            //
            ArrayItemClass.class, //Класс каждого элемента массива, из 
            // которого будет выбран результирующий объект.
            // Параметр обязателен, если из каждого десериализованного
            // тела сообщения нужно получить какие-то данные,
            // из которых будет выбран результат.
            //
            // Функция, с помощью которой извлекаются данные
            // из десериализованного тела сообщения.
            // Она не обязательная. Если ее не указывать,
            // то вернется объект SomeBodyClass
            someBodyObject -> {
                //Алгоритм функции, которая получает данные
                //из каждого десериализованного тела сообщения
                return someArrayItemObject; //один из этих 
                //объектов возвращается как результат,
                //первый попавшийся или с учетом уточнений
            })
            // Указывается объект класса 
            // ru.tinkoff.qa.neptune.core.api.data.format.DataTransformer,
            // c помощью которого десериализуется тело каждого сообщения.
            // Вызов метода необязателен. По умолчанию используется
            // значение свойства RABBIT_MQ_DEFAULT_DATA_TRANSFORMER
            .withDataTransformer(new CustomDataTransformer())
            //можно указать, что auto acknowledge
            .autoAck()
            //опции, уточняющие результат,
            //
      );
  }
}
Уточняющие параметры шага, который возвращает элемент массива. Шаг предусматривает время на ожидание
//Можно указать один или несколько критериев,
//которым должен соответствовать
//результирующий элемент из массива.
// Так же доступны criteriaOr(criteria...),
// criteriaOnlyOne(criteria...)
// criteriaNot(criteria...)
.criteria("Описание критерия, которому должен соответствовать " +
    "результирующий элемент из массива", item -> {
    /*предикат, как работает критерий*/
})
//------------------------------------------
// можно указать время,
// за которое нужные элемент должен быть получен
.timeOut(ofSeconds(5))
//-----------------------------------------------
//Можно указать, что должно быть выброшено исключение,
// если не был получен результирующий элемент (не было ни одного элемента,
// который бы соответствовал перечисленным критериям,
// или непустой массив просто не был получен)
.throwOnNoResult()
//ТАКЖЕ ЕСТЬ СЛЕДУЮЩИЕ ОПЦИИ:
//-----------------------------------------------
//1. Можно указать индекс элемента, который следует вернуть.
//Индекс - индекс объекта в наборе элементов,
//которые соответствуют критериям
.returnItemOfIndex(1)
//-----------------------------------------------
//2. можно указать, при достижении какого количества
//ВСЕХ объектов, которые соответствуют критериям,
//должен быть возвращен результат
.returnIfEntireLength(isEqual(8))
//-----------------------------------------------
//3. можно указать, при достижении каких условий,
//которым должен соответствовать набор ВСЕХ объектов,
//соответствующих критериям,
//можно возвращать результирующий элемент
.returnOnCondition("Описание условия", array -> {
    /*предикат, как работает критерий*/
})
//так же доступны returnOnConditionOr(criteria...),
// returnOnConditionOnlyOne(criteria...)
// returnOnConditionNot(criteria...)
//------------------------------------------
//Если не нашлось столько подходящих объектов, чтобы вернуть результат,
//или весь суб-массив подходящих по критериям элементов,
// из которого должен быть взят результат,
// не соответствует каким-то критериям -
// будет выброшено исключение с подробным описанием