# README
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.
One important note is that while gRPC supports streaming requests and replies, go-kit does not. You can still use streams in your service, but their implementation will not be able to take advantage of many go-kit features like middleware.
Using gRPC and go-kit together is very simple.
First, define your service using protobuf3. This is explained in gRPC documentation. See addsvc.proto for an example. Make sure the proto definition matches your service's go-kit (interface) definition.
Next, get the protoc compiler.
You can download pre-compiled binaries from the
protobuf release page.
You will unzip a folder called protoc3
with a subdirectory bin
containing
an executable. Move that executable somewhere in your $PATH
and you're good
to go!
It can also be built from source.
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.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.