1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/teamlint-nrpc

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README_EN.md

nRPC

Статус сборки

nRPC — это фреймворк RPC, аналогичный gRPC, но для NATS.

Он может сгенерировать клиентское приложение на Go и сервер из одного файла .hproto, который вы бы использовали для генерации клиентских приложений и серверов gRPC. Сервер генерируется в виде обработчика сообщений NATS MsgHandler.

Почему NATS?

Выполнение RPC через модель запрос-ответ NATS имеет некоторые преимущества перед моделью gRPC:

  • Минимальное открытое обнаружение служб: Клиенты и серверы требуют знать только конечные точки NATS-кластера. Клиенты не нуждаются в обнаружении конечных точек отдельных служб, которым они зависят.
  • Балансировка нагрузки без балансировщиков нагрузки: Безостоянные микросервисы могут быть размещены повторно и подключены к одному и тому же кластеру NATS. Входящие запросы затем могут быть случайным образом распределены между этими службами с помощью NATS очередей. Нет необходимости настройки балансировщика нагрузки (высокой доступности) для каждого микросервиса.

Пирожное не всегда бесплатно, однако. При масштабировании сам кластер NATS может стать зоной затруднений. Возможности gRPC, такие как потоковая передача и продвинутая аутентификация, недоступны.Однако NATS и nRPC предлагают значительно меньшую операционную сложность, если ваш масштаб и требования подходят.

В RapidLoop мы используем эту модель для нашего SaaS-продукта OpsDash в производстве и довольны этим. nRPC является третьим поколением внутренней библиотеки.

Обзор

nRPC включает в себя плагин компилятора протоколов protoc-gen-nrpc, который генерирует Go-код из файла .proto.

Для файла .proto, такого как helloworld.proto, использование выглядит следующим образом:

$ ls
helloworld.proto
$ protoc --go_out=. --nrpc_out=. helloworld.proto
$ ls
helloworld.nrpc.go	helloworld.pb.go	helloworld.proto

Файл .pb.go, содержащий определения для классов сообщений, генерируется стандартным плагином Go для protoc. Файл .nrpc.go, содержащий определения для клиента, интерфейса сервера и обработчика NATS, генерируется плагином nRPC. Просмотрите сгенерированные и примерные файлы:

Как это работает

Файл .proto определяет сообщения (например, HelloRequest и HelloReply в примере) и службы (Greeter), имеющие методы (SayHello).Сообщения генерируются как структуры Go обычным плагином компилятора Go для Protobuf и записываются в файлы *.pb.go.

Для остального nRPC генерирует три логических части.

Первая — это тип интерфейса Go (GreeterServer), который ваш реальный микросервис должен реализовать:

// Это содержится в файле .proto
service Greeter {
    rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// Это сгенерированный интерфейс, который вам следует реализовать
type GreeterServer interface {
    SayHello(ctx context.Context, req HelloRequest) (resp HelloReply, err error)
}

Вторая часть — клиент (структура GreeterClient). Эта структура имеет методы с соответствующими типами, которые соответствуют определению службы. Код клиента будет сериализировать и оборачивать объект запроса (HelloRequest) и выполнит запрос NATS Request.

// Клиент связан с соединением NATS.
func NewGreeterClient(nc *nats.Conn) *GreeterClient {...}

// Имеет правильно типизированные методы, которые будут сериализировать и выполнять запрос NATS.
func (c *GreeterClient) SayHello(req HelloRequest) (resp HelloReply, err error) {...}
```Третья и последняя часть — обработчик (GreeterHandler). При наличии соединения NATS и реализации сервера он может принимать запросы NATS в формате, отправляемом вышеупомянутым клиентом. Он должен быть установлен как обработчик сообщений для конкретной темы NATS (по умолчанию имя службы) с помощью методов NATS Subscribe() или QueueSubscribe(). Обработчик вызовет соответствующий метод интерфейса GreeterServer при получении соответствующего запроса.```
// Обработчик связан с соединением NATS и реализацией сервера.
func NewGreeterHandler(ctx context.Context, nc *nats.Conn, s GreeterServer) *GreeterHandler {...}// У него есть метод, который может (и должен) использоваться в качестве обработчика сообщений NATS.
func (h *GreeterHandler) Handler(msg *nats.Msg) {...}

Запуск микросервиса включает в себя следующие шаги:

  • создание файла определения сервиса .proto
  • генерацию файлов \*.pb.go и \*.nrpc.go
  • реализацию интерфейса сервера
  • написание основной программы, которая будет подключена к NATS и запустит обработчик (см. пример)

Чтобы вызвать сервис:

  • импортировать пакет, содержащий сгенерированные файлы \*.nrpc.go
  • в клиентском коде подключиться к NATS
  • создать объект Caller и вызывать методы по мере необходимости (см. пример)

Возможности

Следующие страницы вики подробно описывают возможности nRPC:

Установка

nRPC требует Go версии 1.7 или выше. $GOPATH/bin должно находиться в $PATH, чтобы вызов protoc работал корректно. Для генерации кода вам потребуется компилятор протоколов (который можно установить отсюда) и плагин protoc для nRPC.

Для установки плагина protoc для nRPC:

$ go get github.com/teamlint/nrpc/protoc-gen-nrpc

Для сборки и запуска примера greeter_server:``` $ go get github.com/teamlint/nrpc/examples/helloworld/greeter_server $ greeter_server сервер работает, нажмите Ctrl+C для завершения работы.


Для сборки и запуска примера `greeter_client`:

$ go get github.com/teamlint/nrpc/examples/helloworld/greeter_client $ greeter_client Приветствие: Привет, мир $


## Документация

Дополнительную информацию о том, как описать службы gRPC с помощью файлов `.proto`, вы можете найти [здесь](https://grpc.io/docs/guides/concepts.html).
Дополнительную информацию о NATS начните с их [веб-сайта](https://nats.io/). Для получения более подробной информации о nRPC рекомендуется изучить исходный код.

## Статус
На данный момент поддерживаются только клиенты и серверы на Go.

## TODO - Время ожидания запроса клиента NRPC, CallOption или Context
- Изменение имени XXXHandler | XXXConcurrentHandler
- Пользователь [protogen](google.golang.org/protobuf/compiler/protogen) рефакторинг protoc-gen-nrpc

Создано RapidLoop. Выпущено под лицензией Apache 2.0.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

На основе NATS — простая и эффективная структура RPC. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/teamlint-nrpc.git
git@api.gitlife.ru:oschina-mirror/teamlint-nrpc.git
oschina-mirror
teamlint-nrpc
teamlint-nrpc
master