.. | ||
client.go | ||
doc.go | ||
encode_decode.go | ||
README.md | ||
request_response_funcs.go | ||
server.go |
grpc
gRPC is an excellent, modern IDL and transport for microservices. If you're starting a greenfield project, Go kit strongly recommends gRPC as your default transport. And using gRPC and Go kit together is very simple.
First, define your service using protobuf3. This is explained in gRPC documentation. See add.proto for an example. Make sure the proto definition matches your service's Go kit (interface) definition.
Next, get the protoc compiler. Unfortunately, this needs to be done from source. Fortunately, it's pretty straightforward.
brew install autoconf automake libtool
git clone https://github.com/google/protobuf
cd protobuf
./autogen.sh ; ./configure ; make ; make install
Then, compile your service definition, from .proto to .go.
protoc add.proto --go_out=plugins=grpc:.
Finally, write a tiny binding from your service definition to the gRPC definition. It's a simple conversion from one domain to another. See grpc_binding.go for an example.
That's it! The gRPC binding can be bound to a listener and serve normal gRPC requests. And within your service, you can use standard Go kit components and idioms. See addsvc for a complete working example with gRPC support. And remember: Go kit services can support multiple transports simultaneously.