Go to file
2015-11-11 00:45:02 +00:00
broker Update registry so version is surfaced 2015-11-08 01:48:48 +00:00
client Update registry so version is surfaced 2015-11-08 01:48:48 +00:00
cmd Update registry so version is surfaced 2015-11-08 01:48:48 +00:00
context Change initialisation and add metadata 2015-05-26 22:39:48 +01:00
errors Fixes nil pointer dereference error 2015-01-30 16:03:17 +01:00
examples Add pub/sub to client/server and make broker more low level 2015-06-12 19:52:27 +01:00
registry Update registry so version is surfaced 2015-11-08 01:48:48 +00:00
server Add extractor test 2015-11-05 12:39:08 +00:00
transport Use direct reply queue 2015-11-08 23:16:14 +00:00
.travis.yml Add travis file 2015-10-27 14:13:32 +00:00
LICENSE Add apache license 2015-02-27 09:38:47 +00:00
README.md Add table 2015-11-11 00:45:02 +00:00

Go Micro GoDoc Travis CI

Go Micro is a microservices library which provides the fundamental building blocks for writing fault tolerant distributed systems at scale. It is part of the Micro toolchain.

An example server can be found in examples/server.

Features

Feature Package Description
Discovery Registry A way of locating services to communicate with
Client Client Used to make RPC requests to a service
Server Server Listens and serves RPC requests
Pub/Sub Broker Publish and Subscribe to events

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

Getting Started

Run Consul

$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul

Run Service

$ go run examples/server/main.go --logtostderr
I1108 11:08:19.926071   11358 server.go:96] Starting server go.micro.srv.example id go.micro.srv.example-04de4cf0-8609-11e5-bf3a-68a86d0d36b6
I1108 11:08:19.926407   11358 rpc_server.go:233] Listening on [::]:54080
I1108 11:08:19.926500   11358 http_broker.go:80] Broker Listening on [::]:54081
I1108 11:08:19.926632   11358 rpc_server.go:158] Registering node: go.micro.srv.example-04de4cf0-8609-11e5-bf3a-68a86d0d36b6

Test Service

$ go run examples/client/main.go 
go.micro.srv.example-59b6e0ab-0300-11e5-b696-68a86d0d36b6: Hello John

Writing a service

Create request/response proto

go-micro/examples/server/proto/example/example.proto:

syntax = "proto3";

message Request {
        string name = 1;
}

message Response {
        string msg = 1;
}

Compile proto protoc -I$GOPATH/src --go_out=$GOPATH/src $GOPATH/src/github.com/myodc/go-micro/examples/server/proto/example/example.proto

Create request handler

go-micro/examples/server/handler/example.go:

package handler

import (
	log "github.com/golang/glog"
	c "github.com/myodc/go-micro/context"
	example "github.com/myodc/go-micro/examples/server/proto/example"
	"github.com/myodc/go-micro/server"

	"golang.org/x/net/context"
)

type Example struct{}

func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error {
	md, _ := c.GetMetadata(ctx)
	log.Infof("Received Example.Call request with metadata: %v", md)
	rsp.Msg = server.Config().Id() + ": Hello " + req.Name
	return nil
}

Init server

go-micro/examples/server/main.go:

package main

import (
	log "github.com/golang/glog"
	"github.com/myodc/go-micro/cmd"
	"github.com/myodc/go-micro/examples/server/handler"
	"github.com/myodc/go-micro/server"
)

func main() {
	// optionally setup command line usage
	cmd.Init()

	// Initialise Server
	server.Init(
		server.Name("go.micro.srv.example"),
	)

	// Register Handlers
	server.Handle(
		server.NewHandler(
			new(handler.Example),
		),
	)

	// Run server
	if err := server.Run(); err != nil {
		log.Fatal(err)
	}
}

Run service

$ go run examples/server/main.go --logtostderr
I1108 11:08:19.926071   11358 server.go:96] Starting server go.micro.srv.example id go.micro.srv.example-04de4cf0-8609-11e5-bf3a-68a86d0d36b6
I1108 11:08:19.926407   11358 rpc_server.go:233] Listening on [::]:54080
I1108 11:08:19.926500   11358 http_broker.go:80] Broker Listening on [::]:54081
I1108 11:08:19.926632   11358 rpc_server.go:158] Registering node: go.micro.srv.example-04de4cf0-8609-11e5-bf3a-68a86d0d36b6