luckkiss / natsrpc

NATSRPC, transport by nats, define by proto file(gen code),use like grpc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NATSRPC

  _   _       _______ _____   _____  _____   _____ 
 | \ | |   /\|__   __/ ____| |  __ \|  __ \ / ____|
 |  \| |  /  \  | | | (___   | |__) | |__) | |     
 | . ` | / /\ \ | |  \___ \  |  _  /|  ___/| |     
 | |\  |/ ____ \| |  ____) | | | \ \| |    | |____ 
 |_| \_/_/    \_\_| |_____/  |_|  \_\_|     \_____|

NATSRPC 是一个基于NATS作为消息通信,使用gRPC的方式来定义接口的RPC框架

Why NATSRPC

NATS收发消息需要手动定义subject,request,reply,handler等繁琐且易出错的代码。gRPC需要用服务发现到endpoint才能发送请求。NATRPC的目的就是要像gRPC一样定义接口,像NATS一样不关心具体网络位置,只需要监听和发送就能完成RPC调用。

Feature

  • 使用简单,不需要服务发现
  • 使用gRPC接口定义方式,接口定义清晰,学习成本低
  • 代码生成器一键生成
  • 支持空间隔离
  • 支持定向发送也支持负载均衡(nats的同组内随机)
  • 支持Header和返回Error

安装工具

go install github.com/golang/protobuf/protoc-gen-go@v1.5.2
go install github.com/byebyebruce/natsrpc/cmd/protoc-gen-natsrpc@latest

快速使用

  • 启动nats-server(没有部署好的nats-server可以go run example/cmd/simple_natsserver/main.go)
  1. 创建工程 go mod init natsrpc_test
  2. 引用包 go get github.com/byebyebruce/natsrpc
  3. 定义服务接口
syntax = "proto3";

package natsrpc_test;
option go_package = "github.com/byebyebruce/natsrpc/example/natsrpc_test;natsrpc_test";

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

service Greeter {
  rpc Hello (HelloRequest) returns (HelloReply) {}
}
  1. 生成客户端和服务端代码
protoc --proto_path=. --go_out=paths=source_relative:. --natsrpc_out=paths=source_relative:. *.proto
  1. 实现接口
type Greeter interface {
	// Hello
	Hello(ctx context.Context, req *natsrpc_test.HelloRequest) (*natsrpc_test.HelloReply, error)
}
  1. main.go 启动server和client

更多示例

  1. 请求
  2. 广播
  3. 异步请求
  4. 异步回复
  5. 请求头

压测工具

  1. 广播 go run example/bench/pub/main.go -url=nats://127.0.0.1:4222

  2. 请求 go run example/bench/req/main.go -url=nats://127.0.0.1:4222

TODO

  • service 定义文件改成gRPC标准
  • 支持返回错误
  • 支持Header
  • 生成Client接口
  • 支持中间件
  • 支持goroutine池

About

NATSRPC, transport by nats, define by proto file(gen code),use like grpc

License:Apache License 2.0


Languages

Language:Go 96.8%Language:Shell 2.5%Language:Makefile 0.7%