Skip to content

tumanina/AsyncApiProxy

Repository files navigation

AsyncApiProxy

Async Api base on tasks and messages

ru-RU

AsyncApiProxy представляет собой пример ассинхронного API, работающего на основе Task. В основе подхода лежит использование менеджера сообщений в качестве средства коммуникации между апи и исполнителем а таксже единой базы для хранения задач и ответов на них. Задачи в данном контексте используются в качестве единицы запроса и сохраняется в единой базе используемой одновременно прокси и исполнителем. В случае успешного и быстрого (в пределах указанного таймаута) прокси получает ответ в специально созданную для данного запроса очередь. В случае истечения времени ответ на запрос записывается в базу и может быть в любой момент считан с помощью специального апи для работы с задачами. В приложении для примера используется создание клиента, который происходит в несколько этапов

  1. Прокси посылает сообщение содержащее email и имя клиента в специально выделенную очередь имя которой указано в настройках. Также создается задача и специальная очередь для ожидания ответа, в сообщении содержится уникальный идентификатор задачи и название этой очереди.
  2. Исполнитель (AyncApi.Proxy) считывает сообщение и отправляет запрос в Customer API на создание клиента.
  3. При получении ответа от Customer API исполнитель записывает ответ в базу данных и делает попытку записать ответ в очередь в которой ожидается ответ, Если очередь недоступна то предполагается что она была автоматически удалена в виду истечения таймаута ожидания ответа.
  4. AsyncProxy продолжает слушать созданную на 1 шаге очередь, 4.1 по истечению таймаута очередь уничтожется и в ответе возвращается идентификатор задачи. 4.2 если ответ получен он возвращается в ответе на запрос.

AsyncApi:

  • GET ping - проверка доступности и времени ответа сервера
  • POST /clients/ - добавления клиента
  • GET task/id получение информации о статусе и результате выполнения задачи.

Releases

No releases published

Packages

No packages published

Languages