go-micro

module
v0.0.0-...-2c19b2c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 18, 2015 License: Apache-2.0

README

Go Micro

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.

GoDoc

Features

  • Discovery
  • Client
  • Server
  • Pub/Sub

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
I0525 18:06:14.471489   83304 server.go:117] Starting server go.micro.srv.example id go.micro.srv.example-59b6e0ab-0300-11e5-b696-68a86d0d36b6
I0525 18:06:14.474960   83304 rpc_server.go:126] Listening on [::]:62216
I0525 18:06:14.474997   83304 server.go:99] Registering node: go.micro.srv.example-59b6e0ab-0300-11e5-b696-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/template/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.Info("Received Example.Call request with metadata: %v", md)
        rsp.Msg = server.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
I0525 18:06:14.471489   83304 server.go:117] Starting server go.micro.srv.example id go.micro.srv.example-59b6e0ab-0300-11e5-b696-68a86d0d36b6
I0525 18:06:14.474960   83304 rpc_server.go:126] Listening on [::]:62216
I0525 18:06:14.474997   83304 server.go:99] Registering node: go.micro.srv.example-59b6e0ab-0300-11e5-b696-68a86d0d36b6

Directories

Path Synopsis
examples
server/proto/example
Package example is a generated protocol buffer package.
Package example is a generated protocol buffer package.
proto/health
Package health is a generated protocol buffer package.
Package health is a generated protocol buffer package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL