Задать вопрос
Vindicar
@Vindicar
RTFM!

Как организовать локальную разработку микросервисной системы в PyCharm?

Если я локально разрабатываю монолит в PyCharm, то вопросов нет. Виртуальное окружение, git по вкусу, и вперёд, проектировать и кодить.
Но вот если я хочу поэкспериментировать с разработкой микросервисной системы, ситуация усложняется. Допустим, я хочу потрогать разработку event-oriented систем. Значит, мне нужен брокер сообщений. Но, скажем, тот же rabbitmq - это не питоновский пакет, его в виртуальное окружение не засунешь. Ставить глобально? Как-то звучит не очень.
Запускать систему из 3+ сервисов тоже невесело, хотя это как раз можно накостылить.

Засовывать всё в докер, и сразу писать compose-файл? Но можно ли это всё потом интегрировать с IDE? Как вообще принято делать такие вещи?
  • Вопрос задан
  • 2566 просмотров
Подписаться 7 Простой Комментировать
Ответ пользователя Vindicar К ответам на вопрос (2)
Vindicar
@Vindicar Автор вопроса
RTFM!
Нашел один вариант - может, и не лучший, но приемлемый для учебных задач.
1. Брокер сообщений
Пакет kombu реализует работу с брокерами сообщений в Celery. Помимо типовых транспортов типа RabbitMQ и Redis, у него есть транспорт filesystem, причём позволяющий общаться именно разным процессам. Транспорт in-memory работает только для одного процесса. И тот, и другой транспорты не требуют отдельного брокера - они сами себе брокеры.
На мой неопытный взгляд, потом сменить транспорт на "взрослый" будет несложно. А значит, вполне можно на эту библиотеку опираться, начиная с этапа прототипа.
Единственное "но" - под виндой надо дополнительно поставить pywin32, kombu его сам не подтаскивает.
2. Запуск системы
PyCharm, оказывается, умеет создавать конфигурации запуска для нескольких скриптов.
Нужно сначала создать конфигурации под каждый сервис в системе. Можно использовать автосозданные, а можно вручную. А затем добавить конфигурацию типа Compound, и добавить в неё компонентами нужные "одиночные" конфигурации. Они запустятся параллельно, и остановить их тоже можно все сразу. У каждого сервиса даже будет своя консоль вывода.

Если никто не предложит варианта получше - на этом и остановлюсь.
Ответ написан