Mina

Поддерживаются как производитель, так и потребитель

Компонент Mina представляет собой транспортный механизм для работы с Apache MINA 2.x.

Рекомендуется использовать Netty, так как Netty в настоящее время является более активно поддерживаемым и популярным проектом по сравнению с Apache Mina.

Осторожно с sync=false на стороне потребителя (consumer endpoints): В camel-mina все взаимодействия потребителя являются InOut (с ожиданием ответа). Это отличается от поведения в camel-mina2.

Пользователи Maven должны добавить следующую зависимость в свой файл pom.xml для этого компонента:

Maven users will need to add the following dependency to their pom.xml for this component:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-mina</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

URI format

<span style="color: rgb(0,0,0);">mina:tcp://hostname[:port][?options] mina:udp://hostname[:port][?options] mina:vm://hostname[:port][?options]</span>

Настройки кодека:

Вы можете указать кодировщик (codec) в реестре, используя параметр codec.

  • Для TCP: если кодировщик не указан, параметр textline определяет, будет использоваться текстовый кодек (text-line) или сериализация объектов. По умолчанию применяется сериализация объектов.

  • Для UDP: если кодировщик не указан, используется базовый кодек на основе ByteBuffer.

Протокол VM:

Используется как механизм прямой пересылки данных в рамках одной JVM.

Таймауты:

  • Продюсер Mina имеет таймаут по умолчанию 30 секунд при ожидании ответа от сервера.

Особенности передачи данных:

  1. По умолчанию camel-mina поддерживает только маршалинг тела сообщения (body) -- заголовки и свойства exchange не передаются.

  2. Параметр transferExchange позволяет передавать весь exchange целиком.

Configuring Options

Компоненты настраиваются на двух отдельных уровнях:

  • component level

  • edpoint level

Configuring Component Options

На уровне компонента задаются основные и общие настройки, которые впоследствии наследуются endpoints. Это самый высокий уровень конфигурации.

Например, компонент может иметь настройки безопасности, учетные данные для аутентификации, URL-адреса для сетевых подключений и т. д.

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

Компоненты можно настроить с использованием:

  • Component DSL.

  • Конфигурационного файла (application.properties, *.yaml files, etc).

  • Напрямую в Java code.

Configuring Endpoint Options

Обычно больше времени уходит на настройку endpoints, так как они обладают множеством параметров. Эти параметры позволяют настроить поведение endpoint в соответствии с вашими потребностями. Кроме того, параметры делятся на категории в зависимости от того, используется ли endpoint как потребитель (from), как производитель (to) или в обеих ролях.

Настройка endpoints чаще всего выполняется непосредственно в URI endpoint в виде параметров пути и запроса. Также вы можете использовать Endpoint DSL и DataFormat DSL как типобезопасный способ настройки endpoints и форматов данных в Java.

Хорошей практикой при настройке параметров является использование Property Placeholders.

Property placeholders предоставляют несколько преимуществ:

  • Помогают избежать использования жестко закодированных URL-адресов, номеров портов, конфиденциальной информации и других настроек.

  • Позволяют вынести конфигурацию за пределы кода.

  • Делают код более гибким и удобным для повторного использования.

Component properties

Allow Default Codec

  • Компонент MINA устанавливает кодек по умолчанию, если оба условия выполнены: кодек не задан (null) и textline имеет значение false. Установка параметра allowDefaultCodec в false предотвращает установку кодека по умолчанию в качестве первого элемента в цепочке фильтров. Это полезно в сценариях, где другой фильтр должен быть первым в цепочке, например, SSL-фильтр.

  • По умолчанию: true

  • Тип: boolean

Client Mode

  • Если clientMode имеет значение true, потребитель (consumer) MINA будет подключаться к адресу в качестве TCP-клиента.

  • По умолчанию: false

  • Тип: boolean

Codec

  • Функция для того чтобы использовать пользовательскую реализацию кодеков MINA.

  • По умолчанию:

  • Тип: ProtocolCodecFactory

Decoder Max Line Length

  • Используется для установки максимальной длины строки декодера текстового протокола (textline). По умолчанию используется значение Mina, которое составляет 1024.

  • По умолчанию: 1024

  • Тип: int

Disconnect

  • Определяет, следует ли разрывать соединение (закрывать) сессию Mina сразу после использования. Может применяться как для потребителя (consumer), так и для производитель (producer).

  • По умолчанию: false

  • Тип: boolean

Encoder Max Line Length

  • Устанавливает максимальную длину строки для кодировщика текстового протокола (textline protocol encoder). По умолчанию используется внутреннее значение Mina, равное Integer.MAX_VALUE.

  • По умолчанию: -1

  • Тип: int

Encoding

  • Вы можете настроить кодировку (название кодировки) для использования в TCP textline codec и UDP протоколе. Если параметр не задан, Camel будет использовать кодировку по умолчанию JVM.

  • По умолчанию:

  • Тип: String

Filters

  • Вы можете задать список фильтров Mina IoFilter для использования.

  • По умолчанию:

  • Тип: List

Host

  • Тип: Обязательное поле - Имя хоста для использования. Для локального сервера в качестве потребителя (consumer) укажите localhost или 0.0.0.0. Для производителя (producer) используйте имя хоста или IP-адрес удаленного сервера.

  • По умолчанию:

  • Тип: String

Mina Logger

  • Вы можете активировать фильтр логирования Apache MINA. Apache MINA использует логирование slf4j на уровне INFO для записи всех входящих и исходящих данных.

  • По умолчанию: false

  • Тип: boolean

Port

  • Обязательное поле - Номер порта.

  • По умолчанию:

  • Тип: int

Protocol

  • Обязательно поле - Используемый протокол.

  • По умолчанию:

  • Тип: String

Sync

  • Тип: Настройка режима работы endpoint: односторонний (one-way) или запрос-ответ (request-response).

  • По умолчанию: true

  • Тип: boolean

Textline

  • Применяется только для TCP. Если кодек не указан, данный флаг активирует текстовый кодек (text line based codec). Если флаг не задан или имеет значение false, по умолчанию используется Object Serialization поверх TCP.

  • По умолчанию: false

  • Тип: boolean

Textline Delimiter

  • Применяется только для TCP при textline=true. Устанавливает разделитель строк текста. Если не указан, Camel использует значение DEFAULT. Этот разделитель отмечает конец текстовой строки.

    Возможные значения:

    • DEFAULT

    • AUTO

    • UNIX

    • WINDOWS

    • MAC

  • По умолчанию:

  • Тип: MinaTextLineDelimiter

Timeout

  • Вы можете настроить таймаут ожидания ответа от удаленного сервера. Значение таймаута указывается в миллисекундах (например, 60000 соответствует 60 секундам).

  • По умолчанию: 30000

  • Тип: long

Write Timeout

  • Максимальное время для отправки данных в MINA-сессию. По умолчанию: 10000 миллисекунд (10 секунд).

  • По умолчанию: 10000

  • Тип: long

Component security properties

Ssl Context Parameters

  • Настройка SSL-безопасности.

  • По умолчанию:

  • Тип: SSLContextParameters

Component advanced properties

Bridge Error Handler

  • Предоставляет возможность связать потребителя с маршрутизатором Error Handler Camel. Это позволяет обрабатывать исключения (если возможно), возникающие при получении входящих сообщений потребителем Camel, в виде сообщений, передаваемых в маршрутизатор Error Handler.

    Важно: Это возможно только в том случае, если сторонний компонент позволяет Camel получать уведомления о возникших исключениях. Некоторые компоненты обрабатывают исключения только внутренне, из-за чего использование bridgeErrorHandler становится невозможным. В некоторых случаях мы можем доработать компонент Camel, чтобы интегрировать его со сторонним компонентом и сделать такую возможность доступной в будущих выпусках. По умолчанию потребитель использует org.apache.camel.spi.ExceptionHandler для обработки исключений, которые логируются с уровнем WARN или ERROR и игнорируются.

  • По умолчанию: false

  • Тип: boolean

Disconnect On No Reply

  • При включенном режиме sync (синхронном) данная опция определяет, должен ли MinaConsumer разрывать соединение при отсутствии ответа для отправки.

  • По умолчанию: true

  • Тип: boolean

Exception Handler

  • Позволяет потребителю использовать собственный ExceptionHandler.

    Обратите внимание, что если включена опция bridgeErrorHandler, то эта настройка не используется. По умолчанию потребитель обрабатывает исключения, которые логируются с уровнем WARN или ERROR и игнорируются.

  • По умолчанию:

  • Тип: ExceptionHandler

Exchange Pattern

  • Определяет шаблон взаимодействия, который применяется, когда потребитель создает новый обмен (exchange).

    Возможные значения:

    • InOnly

    • InOut

  • По умолчанию:

  • Тип: ExchangePattern

Maximum Pool Size

  • Тип: Количество рабочих потоков в пуле для обработки TCP и UDP соединений.

  • По умолчанию: 16

  • Тип: int

No Reply Log Level

  • При включенном синхронном режиме (sync) этот параметр определяет уровень логирования, который MinaConsumer должен использовать при отсутствии ответа для отправки.

    Возможные значения:

    • TRACE

    • DEBUG

    • INFO

    • WARN

    • ERROR

    • OFF

  • По умолчанию: WARN

  • Тип: LoggingLevel

Ordered Thread Pool Executor

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

  • По умолчанию: true

  • Тип: boolean

Transfer Exchange

  • Устаревшая функция. Применяется только для TCP. Позволяет передавать весь Exchange по сети, а не только тело сообщения. Передаются следующие данные: тело входящего сообщения (In body), тело исходящего сообщения (Out body), тело ошибки (fault body), заголовки входящего сообщения (In headers), заголовки исходящего сообщения (Out headers), заголовки ошибки (fault headers), свойства Exchange, исключения Exchange. Требуется сериализуемость всех объектов. Camel автоматически исключит несериализуемые объекты с записью в лог (уровень WARN). Также необходимо настроить objectCodecPattern на (*) для разрешения передачи Java-объектов.

  • По умолчанию: false

  • Тип: boolean