diff --git a/examples/mercury/README.md b/examples/mercury/README.md new file mode 100644 index 00000000..3bc148c8 --- /dev/null +++ b/examples/mercury/README.md @@ -0,0 +1,5 @@ +# Mercury + +An integration for [mondo/mercury](https://github.com/mondough/mercury) + + diff --git a/examples/mercury/mercury_client.go b/examples/mercury/mercury_client.go new file mode 100644 index 00000000..cacbf704 --- /dev/null +++ b/examples/mercury/mercury_client.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" + "time" + + hello "github.com/micro/micro/examples/greeter/server/proto/hello" + "github.com/mondough/mercury" + tmsg "github.com/mondough/typhon/message" + "github.com/mondough/typhon/rabbit" +) + +func main() { + req := mercury.NewRequest() + req.SetService("foo") + req.SetEndpoint("Say.Hello") + req.SetBody(&hello.Request{ + Name: "John", + }) + tmsg.ProtoMarshaler().MarshalBody(req) + trans := rabbit.NewTransport() + rsp, err := trans.Send(req, time.Second) + if err != nil { + fmt.Println(err) + return + } + tmsg.ProtoUnmarshaler(new(hello.Response)).UnmarshalPayload(rsp) + + fmt.Println(rsp.Body()) +} diff --git a/examples/mercury/mercury_service.go b/examples/mercury/mercury_service.go new file mode 100644 index 00000000..ef1236af --- /dev/null +++ b/examples/mercury/mercury_service.go @@ -0,0 +1,34 @@ +package main + +import ( + "github.com/mondough/mercury" + "github.com/mondough/mercury/server" + "github.com/mondough/mercury/service" + "github.com/mondough/typhon/rabbit" + + hello "github.com/micro/micro/examples/greeter/server/proto/hello" +) + +func handler(req mercury.Request) (mercury.Response, error) { + request := req.Body().(*hello.Request) + rsp := req.Response(&hello.Response{ + Msg: "Hey " + request.Name, + }) + return rsp, nil +} + +func main() { + s := service.Init(service.Config{ + Name: "foo", + Transport: rabbit.NewTransport(), + }) + + s.Server().AddEndpoints(server.Endpoint{ + Name: "Say.Hello", + Handler: handler, + Request: new(hello.Request), + Response: new(hello.Response), + }) + + s.Run() +} diff --git a/examples/mercury/micro_client.go b/examples/mercury/micro_client.go new file mode 100644 index 00000000..21e48f79 --- /dev/null +++ b/examples/mercury/micro_client.go @@ -0,0 +1,37 @@ +package main + +import ( + "fmt" + + "github.com/micro/go-micro/client" + mcodec "github.com/micro/go-plugins/codec/mercury" + "github.com/micro/go-plugins/selector/mercury" + "github.com/micro/go-plugins/transport/rabbitmq" + hello "github.com/micro/micro/examples/greeter/server/proto/hello" + + "golang.org/x/net/context" +) + +func main() { + rabbitmq.DefaultExchange = "b2a" + rabbitmq.DefaultRabbitURL = "amqp://localhost:5672" + + c := client.NewClient( + client.Selector(mercury.NewSelector()), + client.Transport(rabbitmq.NewTransport([]string{})), + client.Codec("application/x-protobuf", mcodec.NewCodec), + client.ContentType("application/x-protobuf"), + ) + + req := c.NewRequest("foo", "Say.Hello", &hello.Request{ + Name: "John", + }) + + rsp := &hello.Response{} + + if err := c.Call(context.Background(), req, rsp); err != nil { + fmt.Println(err) + } + + fmt.Println(rsp) +} diff --git a/examples/mercury/micro_server.go b/examples/mercury/micro_server.go new file mode 100644 index 00000000..0d3112f4 --- /dev/null +++ b/examples/mercury/micro_server.go @@ -0,0 +1,38 @@ +package main + +import ( + "flag" + "github.com/micro/go-micro/server" + mcodec "github.com/micro/go-plugins/codec/mercury" + "github.com/micro/go-plugins/transport/rabbitmq" + hello "github.com/micro/micro/examples/greeter/server/proto/hello" + + "golang.org/x/net/context" +) + +type Say struct{} + +func (s *Say) Hello(ctx context.Context, req *hello.Request, rsp *hello.Response) error { + rsp.Msg = "Hey " + req.Name + return nil +} + +func main() { + flag.Parse() + rabbitmq.DefaultExchange = "b2a" + rabbitmq.DefaultRabbitURL = "amqp://localhost:5672" + + s := server.NewServer( + server.Name("foo"), + server.Id("foo"), + server.Address("foo"), + server.Transport(rabbitmq.NewTransport([]string{})), + server.Codec("application/x-protobuf", mcodec.NewCodec), + ) + s.Handle( + s.NewHandler(&Say{}), + ) + + s.Start() + select {} +}