Как можно организовать связь php + golang в микросервисе?

Необходимо вынести "узкий" участок, написанный на пхп, в го
Делаю впервые и не знаю как реализовать передачу данных из пхп в го и наоборот
В голову приходит только написать сервер на го, и с пхп отправлять на него запросы
Но много "но"
Ещё нашёл статью, где используют очередь, но мне кажется, это слишком мудреное решение
Поделитесь опытом, кто как пишет микросервис в связке пхп-го
  • Вопрос задан
  • 711 просмотров
Пригласить эксперта
Ответы на вопрос 4
@RidgeA
Либо очередь либо запросы. Другие варианты - в виде сделать расширение для php сложны и могут быть overkill.
Очередь или запросы - зависит от задачи. Очередь хороша для длительных задач, но усложнено получение результата выполнения задачи.
Запросы могут быть как по http так и по tcp/unix (если запросов/трафика очень много)
Ответ написан
eastywest
@eastywest
Backend developer
Используйте gRPC
Ответ написан
Комментировать
hOtRush
@hOtRush
Если нужно данные гонять туда-сюда, можно попробовать redis pub-sub
Ответ написан
Комментировать
@KirEv
думаю нужно больше информации, чтобы понять, для чего, в данном случае, используется рнр и зачем там go

недавно делал что-то похожее: на сервак приходит tar.bz2 архив, в нем текстовые файлы с данными, таких архивов в течении часа собирается достаточно много, данные текстовые нужно прочитать и положить в 2 таблицы: подробная и обобщенная, и для полученных данных выполнить некоторые генерации .json-файлов и .md5 рнр-скриптом, который лет 5 используется в многих местах

времени было мало, сделал по тупому :)

1. go-рутина крутиться и читает каждые 5-10 сек (точно не помню) спец.папку куда ложим архивы, если архив есть - создается файл archive-name.log и начинается процесс расспаковки и т.п.

2. сам процесс работы нужно отображать в браузере, сокеты использовать времени не было, получилось просто: ажакс отправляет запрос с id-архивом, и читает лог-файл с нулевого места или с места последнего чтения, так как если более 30сек скрипт выполняется - апач вываливал gateway timeout.

3. когда go-приложение заканчивало свою работу - создавался файл archive-id.done и вызывается рнр-скрипт с помощью exec.cmd

4. когда клиент читал лог по ИД ресурса и есть файл *.done - считалось, что клиент получил всю инфу, и создавался еще один файл .finished

5. горутина из пункта 1) кроме поиска архива, ищет .finish и .done, если такое есть - удаляет использованнЫе данные.

таким образом удалось в течении нескольких часов скрестить старый рнр-скрипт с go-приложением, отображать в браузере прогресс операции, и избавиться от некоторых других проблем.

работает в результате все очень быстро.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы