Дополнительная функциональность#
Данный раздел применим для роли Администратор.
Предусловия#
Не требуются.
Последовательность выполнения#
Дополнительная функциональность входит в стандартные механизмы подключения к 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
Правила эксплуатации#
Не требуется.
Результат#
Дополнительная функциональность подключена.