Настройки конфигурационного файла *.conf для адаптера под формат CloudEvent#

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

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

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

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

Параметры настройки конфигурации#

Все конфигурационные настройки для адаптера под формат CloudEvent задаются в файле *.conf, который необходимо заполнить до запуска процесса установки EVTA.

В таблице представлены параметры настройки, задаваемые в файле *.conf:

Параметр

Описание

transport

Список параметров с настройками транспорта

transport: type

Тип транспорта

message

Cписок параметров с настройками для сообщений

message: transport

Имя используемого транспорта (ключ для получения параметров берется из блока transport)

message: topic

Имя используемого топика

message: members

Массив с разрешенными операциями для данного сообщения

message: members: memberId

Идентификатор клиента

message: members: protocols

Массив разрешенных протоколов (поддерживаемые: rest,grpc)

message: members: actions

Массив разрешенных действий (поддерживаемые: publish,subscribe, commit)

message: schemas

Список схем для валидации сообщения по схеме

webhook

Настройки для вебхуков, используется для rest (имя объекта: адрес для запроса; сам объект: настройки ssl при необходимости)

server

Настройки серверной части адаптера EVTA

server: type

Тип запускаемого адаптера EVTA: rest, grpc или replication (режим перекладчика). По умолчанию rest

server: host

Хост, на котором запускается адаптер EVTA (по умолчанию 0.0.0.0)

server: port

Порт, на котором запускается адаптер EVTA (по умолчанию 8080)

server: pekko

Настройки pekko (если есть префикс «file», то берется содержимое файла по пути после префикса)

server: membersCheck

Проверка вызовов на вхождение в блок members

server: checkDn

Проверка вызовов на вхождение в блок members будет осуществляться по сертификату, иначе берется заголовок (по умолчанию false)

server: broadcastSubscribe

Тип подписки для grpc адаптера EVTA (по умолчанию false)

server: timeout

Общий тайм-аут на блокирующие операции

server: replication

Настройки транспорта (используются в режиме replication)

server: replication: source

Имя транспорта, из которого будут вычитываться сообщения (ключ для получения параметров берется из блока transport)

server: replication: source: destination

Имя транспорта, в который будут записываться сообщения (ключ для получения параметров берется из блока transport)

webhooks

Вебхуки для запуска на старте адаптера EVTA (имя объекта: имя вебхука)

webhooks: webhookName

Имя вебхука

webhooks: webhookName: url

Адрес, куда будут отправляться сообщения. Так же по этому ключу берутся настройки из блока webhook

webhooks: webhookName: messageName

Транспорт, из которого вычитываются сообщения. Так же по этому ключу берутся настройки из блока message

Примеры конфигурации#

Пример конфигурации для REST взаимодействия#

Пример полной конфигурации:

{
  "transport": {
    "localKafka": {
      "type": "kafka",
      "bootstrap.servers": "localhost:9092",
      "group.id": "test1"
    },
    "nonexistentKafka": {
      "type": "kafka",
      "bootstrap.servers": "localhost:9093",
      "group.id": "test"
    }
  },
  "webhook": {
    "https://localhost:1234/test": {
      "type": "webhook",
      "ssl.key.password": "<password>",
      "ssl.keystore.location": "/path/to/grpc-adapter.jks",
      "ssl.keystore.password": "<password>",
      "ssl.truststore.location": "/path/to/grpc-adapter.jks",
      "ssl.truststore.password": "<password>",
      "ssl.endpoint.identification.algorithm": "dn",
      "ssl.allowed.dn": "CN=test1; CN=test2"
    }
  },
  "message": {
    "ru.sbt.ss.event": {
      "transport": "localKafka",
      "topic": "cloudevents",
      "members": [
        {
          "memberId": "<memberId>",
          "protocols": [
            "rest",
            "grpc"
          ],
          "actions": [
            "publish",
            "subscribe",
            "commit"
          ]
        }
      ]
    },
    "ru.sbt.ss.event2": {
      "transport": "localKafka",
      "topic": "cloudevents2"
    },
    "ru.sbt.ss.event.nonexistent": {
      "transport": "nonexistentKafka",
      "topic": "cloudevents"
    }
  },
  "server": {
    "type": "rest",
    "membersCheck": "true",
    "ssl.protocol": "TLSv1.2",
    "ssl.key.password": "<password>",
    "ssl.keystore.location": "/path/to/grpc-adapter.jks",
    "ssl.keystore.password": "<password>",
    "ssl.truststore.location": "/path/to/grpc-adapter.jks",
    "ssl.truststore.password": "<password>",
    "ssl.endpoint.identification.algorithm": "dn",
    "ssl.allowed.dn": "CN=test1; CN=test2",
    "pekko": "file:/path/to/pekko.conf"
  },
  "webhooks": {
    "localWebhook": {
      "url": "https://localhost:1234/test",
      "messageName": "ru.sbt.ss.event"
    }
  }
}

Пример конфигурации для gRPC взаимодействия#

{
  "transport": {
    "localKafka": {
      "type": "kafka",
      "bootstrap.servers": "localhost:9092",
      "group.id": "test1",
      "auto.offset.reset": "earliest",
      "enable.auto.commit": "false",
      "timeout": "100000"
    }
  },
  "webhook": {
  },
  "message": {
    "publication": {
      "ru.sbt.ss.event": {
        "transport": "localKafka",
        "topic": "cloudevents",
        "members": [
          {
            "memberId": "<memberId>",
            "protocols": [ "rest","grpc" ],
            "actions": [ "publish","subscribe","commit","unsubscribe" ]
          }
        ],
        "type": "json",
        "schemas": [ "src/test/resources/json/schema.json" ]
      },
      "ru.sbt.ss.event2": {
        "transport": "localKafka",
        "topic": "cloudevents2",
        "schemas": [ "src/test/resources/json/schema.json" ]
      }
    },
    "subscription": {
      "ru.sbt.ss.event": {
        "transport": "localKafka",
        "topic": "cloudevents",
        "members": [
          {
            "memberId": "<memberId>",
            "protocols": ["rest","grpc"],
            "actions": ["publish","subscribe","commit","unsubscribe"]
          }
        ],
        "type": "json",
        "schemas": [ "src/test/resources/json/schema.json" ]
      },
      "ru.sbt.ss.event2": {
        "transport": "localKafka",
        "topic": "cloudevents2",
        "schemas": [ "src/test/resources/json/schema.json" ]
      }
    }
  },
  "server": {
    "type": "grpc",
    "membersCheck": "true",
    "checkDn": "true",
    "port": "12345"
  },
  "client": {
  }
}

Пример конфигурации для обновления транспорта#

{
  "transport": {
    "localKafka": {
      "type": "kafka",
      "bootstrap.servers": "localhost:9092",
      "group.id": "test_update",
      "auto.offset.reset": "earliest"
    }
  }
}

Поддерживаемые типы транспорта#

  • kafka — Platform V Corax/Apache Kafka;

  • artemis — брокер Artemis MQ;

  • rabbit — брокер RabbitMQ.

Подробнее о поддерживаемых типах транспорта описано в разеле Настройки конфигурационного файла adapter.conf, подраздел: «Поддерживаемые типы транспорта для параметров Сonsumer и Producer».

Конфигурация HealthCheck#

Настройки HealthCheck:

Имя

Описание

healthCheck.host

Хост, на котором будет доступен HealthCheck

healthCheck.port

Порт, на котором будет доступен HealthCheck

Дополнительные настройки HealthCheck можно прописать с добавлением префикса healthCheck..

Внешний API сервиса#

Имя

Описание

Параметры

Тип вызова

Результаты

Потребители

Проверка работоспособности

АС отправляет REST-запрос типа GET http://host:port/health, получает ответ о работоспособности EVTA

см. раздел «Принципы работы REST-взаимодействий EVTA»

Синхронный

см. раздел «Возвращаемые статусы»

Администраторы

Запрос проверяет, готов ли EVTA обслуживать запросы

АС отправляет REST-запрос типа GET http://host:port/ready, получает ответ о готовности EVTA

см. раздел «Принципы работы REST-взаимодействий EVTA»

Синхронный

см. раздел «Возвращаемые статусы»

Администраторы

Описание поддерживаемых REST эндпоинтов#

{
  "openapi": "3.1.0",
  "info": {
    "title": "REST API reactive stream adapter для версии протокола http/2.0",
    "description": "REST API Reactive stream adapter, которое позволяет обращаться к брокерам сообщений как egress.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "http://localhost:8085",
      "description": "Проверка адаптера"
    },
    {
      "url": "https://localhost:10087",
      "description": "Публикация"
    },
    {
      "url": "https://localhost:10095",
      "description": "Подписка"
    }
  ],
  "paths": {
    "/health": {
      "description": "Проверка работоспособности EVTA",
      "get": {
        "servers": [
          {
            "url": "http://localhost:8085",
            "description": "Проверка адаптера"
          }
        ],
        "tags": [
          "Проверка работоспособности"
        ],
        "summary": "Для администраторов",
        "description": "Запрос для проверки работоспособности EVTA",
        "operationId": "health",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "status": "available"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "example": {
                  "status": "Incorrect uri"
                }
              }
            }
          }
        }
      }
    },
    "/ready": {
      "description": "Готовность EVTA обслуживать запросы",
      "get": {
        "servers": [
          {
            "url": "http://localhost:8085",
            "description": "Проверка работы адаптера"
          }
        ],
        "tags": [
          "Проверка работоспособности"
        ],
        "summary": "Для администраторов",
        "description": "Запрос проверяет, готов ли EVTA обслуживать запросы",
        "operationId": "healthReadiness",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error"
                },
                "example": {
                  "status": "running"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/error"
                },
                "example": {
                  "status": "Incorrect uri"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "error": {
        "type": "object",
        "description": "Расшифровка кода ошибки",
        "properties": {
          "status": {
            "type": "string",
            "description": "Сообщение"
          }
        }
      },
      "baseResponsehttp2.0": {
        "type": "object",
        "required": [
          "body",
          "transportId"
        ],
        "description": "Схема запроса",
        "properties": {
          "body": {
            "type": "string",
            "description": "Тело сообщения"
          },
          "key": {
            "type": "string",
            "description": "Ключ сообщения"
          },
          "transportId": {
            "type": "string",
            "description": "Id для коммита"
          },
          "headers": {
            "type": "object",
            "description": "Заголовки сообщения",
            "properties": {
              "header1": {
                "type": "string",
                "description": "Заголовок 1 сообщения"
              },
              "headerN": {
                "type": "string",
                "description": "Заголовок N сообщения"
              }
            }
          }
        }
      },
      "baseRequesthttp2.0": {
        "type": "object",
        "required": [
          "body"
        ],
        "description": "Схема запроса",
        "properties": {
          "body": {
            "type": "string",
            "description": "Тело сообщения"
          },
          "key": {
            "type": "string",
            "description": "Ключ сообщения"
          },
          "headers": {
            "type": "object",
            "description": "Заголовки сообщения",
            "properties": {
              "header1": {
                "type": "string",
                "description": "Заголовок 1 сообщения"
              },
              "headerN": {
                "type": "string",
                "description": "Заголовок N сообщения"
              }
            }
          }
        }
      },
      "commitMessage": {
        "type": "object",
        "required": [
          "idsToCommit"
        ],
        "properties": {
          "idsToCommit": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Массив id сообщений"
          }
        }
      }
    }
  }
}

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

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

Результат#

Конфигурационный файл *.conf настроен.