я понял клиент и сервер ссылаются на один и тот же сгенерированный grpc pb файл. И может ли сервис быть одноврменно клиентом и сервисом?
У меня архитектура с 5-8 минисервисами, и они все общаются через gRPC, используя один и тот же grpc pb файл. Этот grpc pb файл просто грузится как библиотека в каждый из этих сервисов
А можно по подробнее, только начал знакомится с grpc, еще не до конца догоняю как это реализовать
Да, может быть одновременно клиентом и сервисом. Клиент или сервер какой-то сервис - это уже как ты сделаешь.
думаю что тут отлично подойдут git submodules
По подробнее...ну не знаю. У меня все сервисы общаются друг с другом с помощью gRPC, а proto file и сгенерированный им .go file находятся в отдельной папке - и к ней есть доступ к всех этих сервисов. В этой папке также есть file go.mod - так что она является module
то есть если я разношу эти сервисы на разные виртуальные или физические хосты, то на каждом должна быть эта папка/либа из которй беру .proto?
С таким я не работал. У меня они все физически находятся на одном хосте. Хост запускает все сервисы в виде контейнеров в докере. Но так как они все физически на одном хосте, то папка с grpc она у меня в докере как volume и у контейнеров к ней есть доступ. Если у тебя всё в разных местах то я думаю тебе лучше всего будет запульнуть твою либу grpc в гитхаб чтобы твои сервисы тянули ее от туда.
хорошо, спасибо за понятное объяснение и последний вопрос, ты сразу закидываешь в папку сгенерированный pb файл или генеришь его на моменте старта проекта?
Да сразу, пихаю готовый .go файл - просто для экономии. Но я предполагаю что в принципе можно в докерфайле прописать чтобы он генерился на "старте" - но я так не пробовал
Обсуждают сегодня