Реализация API RESTful перед микросервисами на основе событий - PullRequest
0 голосов
/ 22 января 2020

Я работаю в системе, которая реализует несколько микросервисов, которые обмениваются данными через шину обмена сообщениями RabbitMQ.

  • Эти микросервисы создаются с использованием python с библиотекой pika (для публикации sh сообщений). а также использовать очередь RabbitMQ)
  • Один из этих микросервисов (назовем его «заказы») имеет подключенную базу данных для хранения данных

Пока что компоненты приложения асинхронны полностью полагаясь на обмены / очереди RabbitMQ для связи и, при необходимости, реализует очереди обратного вызова, когда одному микросервису необходимо запрашивать данные у другого. RESTful API-интерфейс для этого микросервиса «заказов», чтобы клиенты (например, веб-браузеры, внешние приложения) могли получать и отправлять данные.

Я могу придумать два способа сделать это:

  1. Создайте еще один микросервис (назовем его 'orders-api') примерно в flask и он подключен к базовой базе данных за микросервисом «заказы». Это кажется плохой идеей, поскольку нарушает шаблон микросервиса, чтобы база данных была подключена только к одному микросервису (я не хочу, чтобы две микросерии были вынуждены знать об одной модели данных)

  2. Создайте микросервис «api-gateway», который предоставляет RESTful API и при получении запроса запрашивает информацию из микросервиса «orders» через шину обмена сообщениями. Аналогично тому, как RabbitMQ документирует удаленные вызовы процедур здесь: https://www.rabbitmq.com/tutorials/tutorial-six-python.html. Это будет означать, что «api-шлюз» будет синхронным и, следовательно, будет блокироваться при ожидании ответа на шине обмена сообщениями.

Я не уверен, что есть другие способы достижения этого, с которым я не знаком. Будем благодарны за любые предложения по интеграции RESTful API в эту среду!

...