gRPC

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

Компонент gRPC позволяет вызывать или предоставлять сервисы удалённого вызова процедур (RPC) с использованием формата обмена Protocol Buffers (protobuf) через транспорт HTTP/2.

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

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-grpc</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);">grpc:host:port/service[?options]</span>

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

Auto Discover Server Interceptors

  • Настройка механизма autoDiscoverServerInterceptors. Если установлено в true, компонент автоматически будет искать экземпляры ServerInterceptor в реестре. В противном случае этот шаг будет пропущен.

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

  • Тип: boolean

Consumer Strategy

  • Этот параметр определяет стратегию верхнего уровня для обработки запросов и ответов сервиса в потоковом режиме. Если выбрана стратегия AGGREGATION, все запросы будут накапливаться в списке, затем передаваться в поток, а накопленные ответы будут отправлены отправителю. Если выбрана стратегия PROPAGATION, запрос отправляется в поток, и ответ немедленно отправляется обратно отправителю. Если выбрана стратегия DELEGATION, запрос отправляется в поток, но ответ не генерируется, так как предполагается, что все необходимые ответы будут отправлены в другой части маршрута. Стратегия делегирования всегда используется с routeControlledStreamObserver=true, чтобы обеспечить выполнение этого предположения.

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

    • AGGREGATION

    • PROPAGATION

    • DELEGATION

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

  • Тип: GrpcConsumerStrategy

Flow Control Window

  • Размер окна управления потоком HTTP/2 (MiB).

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

  • Тип: int

Forward On Completed

  • Определяет, должны ли события onCompleted отправляться в маршрут Camel.

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

  • Тип: boolean

Forward On Error

  • Определяет, должны ли события onError отправляться в маршрут Camel. Исключения будут установлены в качестве тела сообщения.

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

  • Тип: boolean

Host

  • Обязательно: Имя хоста сервера gRPC. Для потребителя это localhost или 0.0.0.0, а для продюсера -- удаленное имя хоста сервера.

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

  • Тип: String

Max Concurrent Calls Per Connection

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

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

  • Тип: int

Max Message Size

  • Максимальный размер сообщения, разрешенный для получения/отправки (MiB).

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

  • Тип: int

Port

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

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

  • Тип: int

Route Controlled Stream Observer

  • Позволяет маршруту управлять наблюдателем потока. Если этот параметр установлен в true, то наблюдатель ответа gRPC-вызова будет установлен с именем GrpcConstants.GRPC_RESPONSE_OBSERVER в объекте Exchange. Обратите внимание, что методы onNext(), onError(), onCompleted() наблюдателя потока должны вызываться в маршруте.

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

  • Тип: boolean

Service

  • Требуется полное имя сервиса из файла дескриптора протокола буфера (имя пакета с точкой перед именем определения сервиса).

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

  • Тип: String

Component security properties

Authentication Type

  • Способ аутентификации, применяемый до установления SSL/TLS соединения.

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

    • NONE

    • GOOGLE

    • JWT

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

  • Тип: GrpcAuthType

Jwt Algorithm

  • Алгоритм подписи JSON Web Token (JWT).

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

    • HMAC256

    • HMAC384

    • HMAC512

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

  • Тип: JwtAlgorithm

Jwt Issuer

  • JSON Web Token issuer.

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

  • Тип: String

Jwt Secret

  • JSON Web Token secret.

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

  • Тип: String

Jwt Subject

  • Тип: JSON Web Token subject.

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

  • Тип: String

Key Cert Chain Resource

  • Ресурс файла цепочки сертификатов X.509 в формате PEM.

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

  • Тип: String

Key Password

  • Тип: Пароль для файла приватного ключа в формате PKCS#8

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

  • Тип: String

Key Resource

  • Ссылка на ресурс файла приватного ключа в формате PKCS#8 в формате PEM.

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

  • Тип: String

Negotiation Type

  • Тип: Определяет тип переговоров безопасности, используемый для коммуникации HTTP/2.

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

    • TLS

    • PLAINTEXT_UPGRADE

    • PLAINTEXT

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

  • Тип: NegotiationType

Service Account Resource

  • Ссылка на файл ключа учетной записи службы в формате JSON, поддерживаемая Google Cloud SDK.

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

  • Тип: String

Trust Cert Collection Resource

  • .Ресурсный файл коллекции доверенных сертификатов в формате PEM для проверки сертификата удаленной endpoint’s.

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

  • Тип: String

Component advanced properties

Bridge Error Handler

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

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

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

  • Тип: boolean

Exception Handler

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

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

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

  • Тип: ExceptionHandler

Exchange Pattern

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

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

    • InOnly

    • InOut

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

  • Тип: ExchangePattern

Synchronous

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

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

  • Тип: boolean