From 2e64897c2727a2f752de654ce0801728e8688d75 Mon Sep 17 00:00:00 2001 From: Asim Aslam Date: Wed, 14 Jan 2015 10:50:43 +0000 Subject: [PATCH] Update readme with example --- README.md | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 63140f61..4bb9d7ed 100644 --- a/README.md +++ b/README.md @@ -6,15 +6,19 @@ An example server can be found in go-micro/template. ## Prerequisites +Consul is the default discovery mechanism provided in go-micro. Discovery is however pluggable. + ### Install Consul [https://www.consul.io/intro/getting-started/install.html](https://www.consul.io/intro/getting-started/install.html) +## Getting Started + ### Run Consul ``` $ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul ``` -## Run Service +### Run Service ``` $ go run go-micro/template/main.go @@ -24,9 +28,98 @@ $ go run go-micro/template/main.go 1416690099281215346 [Debug] Registering go.micro.service.template-c0bfcb44-728a-11e4-b099-68a86d0d36b6 ``` -## Test Service +### Test Service ``` $ go run go-micro/examples/service_client.go go.micro.service.template-c0bfcb44-728a-11e4-b099-68a86d0d36b6: Hello John ``` + +## Writing a service + +### Create request/response proto +`go-micro/template/proto/example/example.proto`: + +``` +package go.micro.service.template.example; + +message Request { + required string name = 1; +} + +message Response { + required string msg = 1; +} +``` + +Compile proto `protoc -I$GOPATH/src --go_out=$GOPATH/src $GOPATH/src/github.com/asim/go-micro/template/proto/example/example.proto` + +### Create request handler +`go-micro/template/handler/example.go`: + +``` +package handler + +import ( + "code.google.com/p/go.net/context" + "code.google.com/p/goprotobuf/proto" + + "github.com/asim/go-micro/server" + example "github.com/asim/go-micro/template/proto/example" + log "github.com/cihub/seelog" +) + +type Example struct{} + +func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error { + log.Debug("Received Example.Call request") + + rsp.Msg = proto.String(server.Id + ": Hello " + req.GetName()) + + return nil +} +``` + +### Init server +`go-micro/template/main.go`: + +``` +package main + +import ( + "log" + + "github.com/asim/go-micro/server" + "github.com/asim/go-micro/template/handler" +) + +func main() { + server.Name = "go.micro.service.template" + + // Initialise Server + server.Init() + + // Register Handlers + server.Register( + server.NewReceiver( + new(handler.Example), + ), + ) + + // Run server + if err := server.Run(); err != nil { + log.Fatal(err) + } + +} +``` + +### Run service +``` +$ go run go-micro/template/main.go + +1416690099281057746 [Debug] Rpc handler /_rpc +1416690099281092588 [Debug] Starting server go.micro.service.template id go.micro.service.template-c0bfcb44-728a-11e4-b099-68a86d0d36b6 +1416690099281192941 [Debug] Listening on [::]:58264 +1416690099281215346 [Debug] Registering go.micro.service.template-c0bfcb44-728a-11e4-b099-68a86d0d36b6 +```