Cleanup and move template
This commit is contained in:
parent
94dee7a459
commit
5516f7ea1f
76
README.md
76
README.md
@ -2,22 +2,16 @@
|
|||||||
|
|
||||||
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](https://github.com/myodc/micro) toolchain.
|
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](https://github.com/myodc/micro) toolchain.
|
||||||
|
|
||||||
An example server can be found in go-micro/template.
|
An example server can be found in examples/server.
|
||||||
|
|
||||||
[![GoDoc](http://img.shields.io/badge/go-documentation-brightgreen.svg?style=flat-square)](https://godoc.org/github.com/myodc/go-micro)
|
[![GoDoc](http://img.shields.io/badge/go-documentation-brightgreen.svg?style=flat-square)](https://godoc.org/github.com/myodc/go-micro)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
- Discovery
|
- Discovery
|
||||||
- Client/Server
|
- Client
|
||||||
|
- Server
|
||||||
- Pub/Sub
|
- Pub/Sub
|
||||||
|
|
||||||
## Future Features
|
|
||||||
- Config
|
|
||||||
- Routing
|
|
||||||
- Monitoring
|
|
||||||
- Tracing
|
|
||||||
- Logging
|
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Consul is the default discovery mechanism provided in go-micro. Discovery is however pluggable.
|
Consul is the default discovery mechanism provided in go-micro. Discovery is however pluggable.
|
||||||
@ -34,79 +28,80 @@ $ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul
|
|||||||
|
|
||||||
### Run Service
|
### Run Service
|
||||||
```
|
```
|
||||||
$ go run go-micro/template/main.go
|
$ 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
|
||||||
I0523 12:21:09.506998 77096 server.go:113] Starting server go.micro.service.template id go.micro.service.template-cfc481fc-013d-11e5-bcdc-68a86d0d36b6
|
I0525 18:06:14.474960 83304 rpc_server.go:126] Listening on [::]:62216
|
||||||
I0523 12:21:09.507281 77096 rpc_server.go:112] Listening on [::]:51868
|
I0525 18:06:14.474997 83304 server.go:99] Registering node: go.micro.srv.example-59b6e0ab-0300-11e5-b696-68a86d0d36b6
|
||||||
I0523 12:21:09.507329 77096 server.go:95] Registering node: go.micro.service.template-cfc481fc-013d-11e5-bcdc-68a86d0d36b6
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Test Service
|
### Test Service
|
||||||
```
|
```
|
||||||
$ go run go-micro/examples/service_client.go
|
$ go run examples/client/main.go
|
||||||
|
go.micro.srv.example-59b6e0ab-0300-11e5-b696-68a86d0d36b6: Hello John
|
||||||
go.micro.service.template-cfc481fc-013d-11e5-bcdc-68a86d0d36b6: Hello John
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Writing a service
|
## Writing a service
|
||||||
|
|
||||||
### Create request/response proto
|
### Create request/response proto
|
||||||
`go-micro/template/proto/example/example.proto`:
|
`go-micro/examples/server/proto/example/example.proto`:
|
||||||
|
|
||||||
```
|
```
|
||||||
package go.micro.service.template.example;
|
syntax = "proto3";
|
||||||
|
|
||||||
message Request {
|
message Request {
|
||||||
required string name = 1;
|
string name = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Response {
|
message Response {
|
||||||
required string msg = 1;
|
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`
|
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
|
### Create request handler
|
||||||
`go-micro/template/handler/example.go`:
|
`go-micro/examples/server/handler/example.go`:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package handler
|
package handler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"code.google.com/p/go.net/context"
|
log "github.com/golang/glog"
|
||||||
"github.com/golang/protobuf/proto"
|
c "github.com/myodc/go-micro/context"
|
||||||
|
example "github.com/myodc/go-micro/examples/server/proto/example"
|
||||||
|
"github.com/myodc/go-micro/server"
|
||||||
|
|
||||||
"github.com/myodc/go-micro/server"
|
"golang.org/x/net/context"
|
||||||
example "github.com/myodc/go-micro/template/proto/example"
|
|
||||||
log "github.com/golang/glog"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Example struct{}
|
type Example struct{}
|
||||||
|
|
||||||
func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error {
|
func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error {
|
||||||
log.Info("Received Example.Call request")
|
md, _ := c.GetMetaData(ctx)
|
||||||
|
log.Info("Received Example.Call request with metadata: %v", md)
|
||||||
rsp.Msg = proto.String(server.Id + ": Hello " + req.GetName())
|
rsp.Msg = server.Id + ": Hello " + req.Name
|
||||||
|
return nil
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Init server
|
### Init server
|
||||||
`go-micro/template/main.go`:
|
`go-micro/examples/server/main.go`:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/myodc/go-micro/server"
|
|
||||||
"github.com/myodc/go-micro/template/handler"
|
|
||||||
log "github.com/golang/glog"
|
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() {
|
func main() {
|
||||||
server.Name = "go.micro.service.template"
|
// optionally setup command line usage
|
||||||
|
cmd.Init()
|
||||||
|
|
||||||
|
server.Name = "go.micro.srv.example"
|
||||||
|
|
||||||
// Initialise Server
|
// Initialise Server
|
||||||
server.Init()
|
server.Init()
|
||||||
@ -127,9 +122,8 @@ func main() {
|
|||||||
|
|
||||||
### Run service
|
### Run service
|
||||||
```
|
```
|
||||||
$ go run go-micro/template/main.go
|
$ 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
|
||||||
I0523 12:21:09.506998 77096 server.go:113] Starting server go.micro.service.template id go.micro.service.template-cfc481fc-013d-11e5-bcdc-68a86d0d36b6
|
I0525 18:06:14.474960 83304 rpc_server.go:126] Listening on [::]:62216
|
||||||
I0523 12:21:09.507281 77096 rpc_server.go:112] Listening on [::]:51868
|
I0525 18:06:14.474997 83304 server.go:99] Registering node: go.micro.srv.example-59b6e0ab-0300-11e5-b696-68a86d0d36b6
|
||||||
I0523 12:21:09.507329 77096 server.go:95] Registering node: go.micro.service.template-cfc481fc-013d-11e5-bcdc-68a86d0d36b6
|
|
||||||
```
|
```
|
||||||
|
@ -6,14 +6,15 @@ import (
|
|||||||
"github.com/myodc/go-micro/client"
|
"github.com/myodc/go-micro/client"
|
||||||
"github.com/myodc/go-micro/cmd"
|
"github.com/myodc/go-micro/cmd"
|
||||||
c "github.com/myodc/go-micro/context"
|
c "github.com/myodc/go-micro/context"
|
||||||
example "github.com/myodc/go-micro/template/proto/example"
|
example "github.com/myodc/go-micro/examples/server/proto/example"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
cmd.Init()
|
cmd.Init()
|
||||||
// Create new request to service go.micro.service.go-template, method Example.Call
|
|
||||||
req := client.NewRequest("go.micro.service.template", "Example.Call", &example.Request{
|
// Create new request to service go.micro.srv.example, method Example.Call
|
||||||
|
req := client.NewRequest("go.micro.srv.example", "Example.Call", &example.Request{
|
||||||
Name: "John",
|
Name: "John",
|
||||||
})
|
})
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
h "github.com/grpc/grpc-common/go/helloworld"
|
|
||||||
"github.com/myodc/go-micro/client"
|
|
||||||
"golang.org/x/net/context"
|
|
||||||
)
|
|
||||||
|
|
||||||
// run github.com/grpc/grpc-common/go/greeter_server/main.go
|
|
||||||
func main() {
|
|
||||||
req := client.NewRpcRequest("helloworld.Greeter", "helloworld.Greeter/SayHello", &h.HelloRequest{
|
|
||||||
Name: "John",
|
|
||||||
}, "application/grpc")
|
|
||||||
|
|
||||||
rsp := &h.HelloReply{}
|
|
||||||
err := client.CallRemote(context.Background(), "localhost:50051", req, rsp)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(rsp.Message)
|
|
||||||
}
|
|
3
examples/server/Dockerfile
Normal file
3
examples/server/Dockerfile
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
FROM scratch
|
||||||
|
ADD server /
|
||||||
|
ENTRYPOINT [ "/server" ]
|
27
examples/server/README.md
Normal file
27
examples/server/README.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Example Service
|
||||||
|
|
||||||
|
An example Go service running with go-micro
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
Install Consul
|
||||||
|
[https://www.consul.io/intro/getting-started/install.html](https://www.consul.io/intro/getting-started/install.html)
|
||||||
|
|
||||||
|
Run Consul
|
||||||
|
```
|
||||||
|
$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul
|
||||||
|
```
|
||||||
|
|
||||||
|
Run Service
|
||||||
|
```
|
||||||
|
$ go run 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 client/main.go
|
||||||
|
go.micro.srv.example-59b6e0ab-0300-11e5-b696-68a86d0d36b6: Hello John
|
||||||
|
```
|
@ -3,8 +3,8 @@ package handler
|
|||||||
import (
|
import (
|
||||||
log "github.com/golang/glog"
|
log "github.com/golang/glog"
|
||||||
c "github.com/myodc/go-micro/context"
|
c "github.com/myodc/go-micro/context"
|
||||||
|
example "github.com/myodc/go-micro/examples/server/proto/example"
|
||||||
"github.com/myodc/go-micro/server"
|
"github.com/myodc/go-micro/server"
|
||||||
example "github.com/myodc/go-micro/template/proto/example"
|
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
@ -12,14 +12,8 @@ import (
|
|||||||
type Example struct{}
|
type Example struct{}
|
||||||
|
|
||||||
func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error {
|
func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error {
|
||||||
md, ok := c.GetMetaData(ctx)
|
md, _ := c.GetMetaData(ctx)
|
||||||
if ok {
|
log.Info("Received Example.Call request with metadata: %v", md)
|
||||||
log.Infof("Received Example.Call request with metadata: %v", md)
|
|
||||||
} else {
|
|
||||||
log.Info("Received Example.Call request")
|
|
||||||
}
|
|
||||||
|
|
||||||
rsp.Msg = server.Id + ": Hello " + req.Name
|
rsp.Msg = server.Id + ": Hello " + req.Name
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
@ -3,15 +3,15 @@ package main
|
|||||||
import (
|
import (
|
||||||
log "github.com/golang/glog"
|
log "github.com/golang/glog"
|
||||||
"github.com/myodc/go-micro/cmd"
|
"github.com/myodc/go-micro/cmd"
|
||||||
|
"github.com/myodc/go-micro/examples/server/handler"
|
||||||
"github.com/myodc/go-micro/server"
|
"github.com/myodc/go-micro/server"
|
||||||
"github.com/myodc/go-micro/template/handler"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// optionally setup command line usage
|
// optionally setup command line usage
|
||||||
cmd.Init()
|
cmd.Init()
|
||||||
|
|
||||||
server.Name = "go.micro.service.template"
|
server.Name = "go.micro.srv.example"
|
||||||
|
|
||||||
// Initialise Server
|
// Initialise Server
|
||||||
server.Init()
|
server.Init()
|
@ -1,12 +1,12 @@
|
|||||||
// Code generated by protoc-gen-go.
|
// Code generated by protoc-gen-go.
|
||||||
// source: myodc/go-micro/template/proto/example/example.proto
|
// source: go-micro/examples/server/proto/example/example.proto
|
||||||
// DO NOT EDIT!
|
// DO NOT EDIT!
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Package example is a generated protocol buffer package.
|
Package example is a generated protocol buffer package.
|
||||||
|
|
||||||
It is generated from these files:
|
It is generated from these files:
|
||||||
myodc/go-micro/template/proto/example/example.proto
|
go-micro/examples/server/proto/example/example.proto
|
||||||
|
|
||||||
It has these top-level messages:
|
It has these top-level messages:
|
||||||
Request
|
Request
|
@ -1,9 +1,9 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
message Request {
|
message Request {
|
||||||
optional string name = 1;
|
string name = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Response {
|
message Response {
|
||||||
optional string msg = 1;
|
string msg = 1;
|
||||||
}
|
}
|
@ -1,3 +0,0 @@
|
|||||||
FROM scratch
|
|
||||||
ADD template /
|
|
||||||
ENTRYPOINT [ "/template" ]
|
|
@ -1,29 +0,0 @@
|
|||||||
# Template Service
|
|
||||||
|
|
||||||
An example Go service running with go-micro
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
Install Consul
|
|
||||||
[https://www.consul.io/intro/getting-started/install.html](https://www.consul.io/intro/getting-started/install.html)
|
|
||||||
|
|
||||||
Run Consul
|
|
||||||
```
|
|
||||||
$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul
|
|
||||||
```
|
|
||||||
|
|
||||||
Run Service
|
|
||||||
```
|
|
||||||
$ go run main.go
|
|
||||||
|
|
||||||
I0523 12:21:09.506998 77096 server.go:113] Starting server go.micro.service.template id go.micro.service.template-cfc481fc-013d-11e5-bcdc-68a86d0d36b6
|
|
||||||
I0523 12:21:09.507281 77096 rpc_server.go:112] Listening on [::]:51868
|
|
||||||
I0523 12:21:09.507329 77096 server.go:95] Registering node: go.micro.service.template-cfc481fc-013d-11e5-bcdc-68a86d0d36b6
|
|
||||||
```
|
|
||||||
|
|
||||||
Test Service
|
|
||||||
```
|
|
||||||
$ go run go-micro/examples/service_client.go
|
|
||||||
|
|
||||||
go.micro.service.template-cfc481fc-013d-11e5-bcdc-68a86d0d36b6: Hello John
|
|
||||||
```
|
|
@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"kind": "Pod",
|
|
||||||
"apiVersion": "v1beta1",
|
|
||||||
"id": "template-service",
|
|
||||||
"desiredState": {
|
|
||||||
"manifest": {
|
|
||||||
"version": "v1beta1",
|
|
||||||
"id": "template-service",
|
|
||||||
"containers": [{
|
|
||||||
"name": "template-service",
|
|
||||||
"image": "chuhnk/go-template",
|
|
||||||
"ports": [{"name": "template-service", "containerPort": 8080}],
|
|
||||||
"command": ["--registry=kubernetes", "--bind_address=:8080"]
|
|
||||||
}],
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"labels": {
|
|
||||||
"name": "go.micro.service.template",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "template-service",
|
|
||||||
"kind": "Service",
|
|
||||||
"apiVersion": "v1beta1",
|
|
||||||
"port": 9091,
|
|
||||||
"containerPort": 8080,
|
|
||||||
"selector": { "name": "go.micro.service.template" },
|
|
||||||
"labels": { "name": "go.micro.service.template" }
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user