Дополнительная функциональность#

Данный раздел применим для роли Администратор.

Предусловия#

Не требуются.

Последовательность выполнения#

Дополнительная функциональность входит в стандартные механизмы подключения к Platform V Corax / Apache Kafka. EVTA поддерживает работу с Serializer Apache Kafka и Deserializer Apache Kafka, которые используются для конвертации сообщений. В EVTA предоставляется функциональность классов-перехватчиков для Apache Kafka, которые отрабатывают перед передачей управления в основной код.

Serializer Apache Kafka и Deserializer Apache Kafka#

EVTA поддерживает работу с Serializer Apache Kafka и Deserializer Apache Kafka, которые используются для конвертации сообщений и входят в стандартные механизмы подключения к Platform V Corax / Apache Kafka. В конфигурационном файле vars.yml в блоке параметров для consumer и producer присутствуют параметры key.serializer и value.serializer.

Пример настроек файла vars.yml:

######################
## Настройки продюсера (не требуется при type: rest/grpc)
#    producer: # Пример продюсера типа Kafka
#      preset_name: kafka_fpss # Обязательный параметр, название пресета
#      topic: "output" # Обязательный параметр для продюсера типа Kafka
##      charset: # кодировка, используемая для конвертации публикуемого значения (при указании "key.serializer" или "value.serializer") в ожидаемый класс. Значение по умолчанию UTF-8
#      proos:  # Пример добавления дополнительных параметров в проперти файл
# Параметры подключения serializer
#       key.serializer: "org.apache.kafka.common.serialization.ByteArraySerializer"
#       value.serializer: "org.apache.kafka.common.serialization.ByteArraySerializer"
######################
## Настройки консьюмера (не требуется при type: rest/grpc)
#    consumer: # Пример консьюмера типа Kafka
#      preset_name: kafka_fpss # Обязательный параметр, название пресета
#      topic: "output" # Обязательный параметр для продюсера типа Kafka
##      deadLetter: "deadLetter" # Необязательный параметр для продюсера типа Kafka, топик ошибочных сообщений
##      charset: # кодировка, используемая для конвертации вычитанного значения (при указании "key.deserializer" или "value.deserializer") в байты. Значение по умолчанию UTF-8
#      props:  # Пример добавления дополнительных параметров в проперти файл
#        group.id: example-consumer
# Параметры подключения deserializer
#        key.deserializer: "org.apache.kafka.common.serialization.ByteArrayDeserializer"
#        value.deserializer: "org.apache.kafka.common.serialization.ByteArrayDeserializer"

Поддерживаемые Deserializers#

Deserializer

org.apache.kafka.common.serialization.ByteArrayDeserializer

org.apache.kafka.common.serialization.VoidDeserializer

org.apache.kafka.common.serialization.ByteBufferDeserializer

org.apache.kafka.common.serialization.BytesDeserializer

org.apache.kafka.common.serialization.DoubleDeserializer

org.apache.kafka.common.serialization.FloatDeserializer

org.apache.kafka.common.serialization.IntegerDeserializer

org.apache.kafka.common.serialization.LongDeserializer

org.apache.kafka.common.serialization.ShortDeserializer

org.apache.kafka.common.serialization.StringDeserializer

org.apache.kafka.common.serialization.UUIDDeserializer

org.apache.kafka.common.serialization.ByteArrayDeserializer

Если в файле с параметрами библиотек Platform V Corax / Apache Kafka задан deserializer, то полученное значение будет переведено в байты.

Поддерживаемые Serializers#

Serializer

org.apache.kafka.common.serialization.ByteArraySerializer

org.apache.kafka.common.serialization.VoidSerializer

org.apache.kafka.common.serialization.ByteBufferSerializer

org.apache.kafka.common.serialization.BytesSerializer

org.apache.kafka.common.serialization.DoubleSerializer

org.apache.kafka.common.serialization.FloatSerializer

org.apache.kafka.common.serialization.IntegerSerializer

org.apache.kafka.common.serialization.LongSerializer

org.apache.kafka.common.serialization.ShortSerializer

org.apache.kafka.common.serialization.StringSerializer

org.apache.kafka.common.serialization.UUIDSerializer

org.apache.kafka.common.serialization.ByteArraySerializer

Если в файле с параметрами библиотек Platform V Corax / Apache Kafka задан serializer, то полученные байты перед публикацией будут приведены к ожидаемому типу.

Классы-перехватчики для Platform V Corax и Apache Kafka#

Общей задачей классов-перехватчиков служит обработка каждой исходящей/входящей записи на уровне транспорта до передачи ее в прикладной код. Таким образом, осуществляется независимая от прикладного кода функциональность транспортного слоя. Вмешательство в работу перехватчика со стороны прикладного кода, если перехватчик загружен в клиента Apache Kafka, невозможно. Только переинициализация клиента с выгрузкой перехватчика.

Поддерживаемые перехватчики#

Тип SIGNATURE (для контроля целостности сообщений):

  • kafka-certificate-signature-interceptor — предназначен для подписания сообщения сертификатом. Подробная документация по перехватчику в документации на компонент EVTD в разделе Kafka-certificate-signature-interceptor;

  • kafka-ott-signature-interceptor — предназначен для получения ОТТ токенов (One Time Token), а также для подписи/проверки подписи сообщений с помощью ОТТ. Подробная документация по перехватчику в документации на компонент EVTD в разделе Kafka-ott-signature-interceptor.

Пример настроек kafka-ott-signature-interceptor в файле vars.yml:

######################
## Настройки продюсера (не требуется при type: rest/grpc)
#  producer: # Пример продюсера типа Kafka
#    preset_name: kafka_fpss # Обязательный параметр, название пресета
#    topic: "output" # Обязательный параметр для продюсера типа Kafka
#   props:
# Параметры подключения serializer
#       key.serializer: "org.apache.kafka.common.serialization.ByteArraySerializer"
#       value.serializer: "org.apache.kafka.common.serialization.ByteArraySerializer"
# Пример подключения kafka-ott-signature-interceptor
#        interceptor.classes: "ru.sbt.ss.kafka.interceptors.OttSignatureProducerInterceptor" #Подключить перехватчик
#        interceptor.signature.service.class: "ru.sbt.ss.kafka.ott.OttSignatureService" #Подключить перехватчик
#        #interceptor.signature.mode:  filter
#        interceptor.signature.ott.service.url: <URL> # URL ОТТ
#        interceptor.signature.ott.service.hosts: host:port # Хост ОТТ
#        interceptor.signature.ott.module.id: "ott-test-moduleA" # ID модуля (также alias клиентского сертификата)
#        interceptor.signature.ott.authz.realm: "synapse" # Realm авторизации
#        interceptor.signature.ott.service.cert.alias: "ott-service"  # alias серверного сертификата отт в truststore
#        interceptor.signature.ott.certstore.type: "JKS" # Тип хранилища сертифкатов (по умолчанию pkcs12)
#        interceptor.signature.ott.certstore.path: "ssl/keystore.jks" # Переопределяет ssl.keystore.location
#        interceptor.signature.ott.trust.store.path: "ssl/truststore.jks" # Переопределяет ssl.truststore.location
#        interceptor.signature.ott.certstore.pwd: "password" # Переопределяет ssl.truststore.password
#        interceptor.signature.ott.certstore.private.key.pwd: "password" # Переопределяет ssl.key.password
#        interceptor.signature.ott.trust.store.pwd: "password" # Переопределяет ssl.truststore.password
#        interceptor.signature.ott.client.tls: "TLSv1.2" # Переопределяет ssl.enabled.protocols
# Пример настройки для realm synapse (целевой на момент написания документации):
#        interceptor.signature.ott.request.add.subject = urn:sbrf:names:pprb:1.0:module:id#ott-test-moduleA
#        interceptor.signature.ott.request.add.resource = urn:sbrf:names:pprb:1.0:api:interface:fullname#${topic}
#        interceptor.signature.ott.request.add.environment.realm = ott:realm#synapse
# Пример подключения kafka-ott-signature-interceptor
##  producer: # Пример продюсера типа artemis
##    preset_name: artemis_fpss # Обязательный параметр, название пресета консьюмера
##    queue: "output" # Обязательный параметр для продюсера типа artemis/rabbit
#
######################
## Настройки консьюмера (не требуется при type: rest/grpc)
#  consumer: # Пример консьюмера типа Kafka
#    preset_name: kafka_fpss # Обязательный параметр, название пресета
#    topic: "output" # Обязательный параметр для продюсера типа Kafka
##    deadLetter: "deadLetter" # Необязательный параметр для продюсера типа Kafka, топик ошибочных сообщений
#    props:  # Пример добавления дополнительных параметров в проперти файл
# Параметры подключения deserializer
#        key.deserializer: "org.apache.kafka.common.serialization.ByteArrayDeserializer"
#        value.deserializer: "org.apache.kafka.common.serialization.ByteArrayDeserializer"
# Пример подключения kafka-ott-signature-interceptor
#        interceptor.classes: "ru.sbt.ss.kafka.interceptors.OttSignatureConsumerInterceptor" #Подключить перехватчик
#        #interceptor.signature.mode:  filter
#        interceptor.signature.ott.service.url: <URL> # URL ОТТ
#        interceptor.signature.ott.service.hosts: host:port # Хост ОТТ
#        interceptor.signature.ott.module.id: "ott-test-moduleA" # ID модуля (также alias клиентского сертификата)
#        interceptor.signature.ott.authz.realm: "synapse" # Realm авторизации
#        interceptor.signature.ott.service.cert.alias: "ott-service"  # alias серверного сертификата отт в truststore
#        interceptor.signature.ott.certstore.type: "JKS" # Тип хранилища сертифкатов (по умолчанию pkcs12)
#        interceptor.signature.ott.certstore.path: "ssl/keystore.jks" # Переопределяет ssl.keystore.location
#        interceptor.signature.ott.trust.store.path: "ssl/truststore.jks" # Переопределяет ssl.truststore.location
#        interceptor.signature.ott.certstore.pwd: "password" # Переопределяет ssl.truststore.password
#        interceptor.signature.ott.certstore.private.key.pwd: "password" # Переопределяет ssl.key.password
#        interceptor.signature.ott.trust.store.pwd: "password" # Переопределяет ssl.truststore.password
#        interceptor.signature.ott.client.tls: "TLSv1.2" # Переопределяет ssl.enabled.protocols
## Пример настройки для realm synapse (целевой на момент написания документации):
#        interceptor.signature.ott.request.add.subject = urn:sbrf:names:pprb:1.0:module:id#ott-test-moduleA
#        interceptor.signature.ott.request.add.resource = urn:sbrf:names:pprb:1.0:api:interface:fullname#${topic}
#        interceptor.signature.ott.request.add.environment.realm = ott:realm#synapse

Правила эксплуатации#

Не требуется.

Результат#

Дополнительная функциональность подключена.