update readme
This commit is contained in:
		
							
								
								
									
										86
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								README.md
									
									
									
									
									
								
							| @@ -27,28 +27,30 @@ For more detailed information on the architecture, installation and use of go-mi | |||||||
|  |  | ||||||
| ## Learn By Example | ## Learn By Example | ||||||
|  |  | ||||||
| An example service can be found in [**examples/service**](https://github.com/micro/examples/tree/master/service) and function in [**examples/function**](https://github.com/micro/examples/tree/master/function). The [**examples**](https://github.com/micro/examples) directory contains many more examples for using things such as middleware/wrappers, selector filters, pub/sub and code generation.  | An example service can be found in [**examples/service**](https://github.com/micro/examples/tree/master/service) and function in [**examples/function**](https://github.com/micro/examples/tree/master/function).  | ||||||
| For the complete greeter example look at [**examples/greeter**](https://github.com/micro/examples/tree/master/greeter). Other examples can be found throughout the GitHub repository. |  | ||||||
|  |  | ||||||
| Check out the blog post to learn how to write go-micro services [https://micro.mu/blog/2016/03/28/go-micro.html](https://micro.mu/blog/2016/03/28/go-micro.html) or watch the talk from the [Golang UK Conf 2016](https://www.youtube.com/watch?v=xspaDovwk34). | The [**examples**](https://github.com/micro/examples) directory contains examples for using things such as middleware/wrappers, selector filters, pub/sub, grpc, plugins and much more. For the complete greeter example look at [**examples/greeter**](https://github.com/micro/examples/tree/master/greeter). Other examples can be found throughout the GitHub repository. | ||||||
|  |  | ||||||
|  | Watch the [Golang UK Conf 2016](https://www.youtube.com/watch?v=xspaDovwk34) video for a high level overview. | ||||||
|  |  | ||||||
| ## Getting Started | ## Getting Started | ||||||
|  |  | ||||||
| This is a quick getting started guide with the greeter service example. | This is a quick getting started guide with the greeter service example. | ||||||
|  |  | ||||||
| ### Prerequisites: Service Discovery | ### Prereq: Service Discovery | ||||||
|  |  | ||||||
| There's just one prerequisite. We need a service discovery system to resolve service names to their address.  | Service discovery is required to resolve services to their addresses.  | ||||||
| The default discovery mechanism used in go-micro is Consul. Discovery is however pluggable so you can used  |  | ||||||
| etcd, kubernetes, zookeeper, etc. Plugins can be found in [micro/go-plugins](https://github.com/micro/go-plugins). | The default discovery plugin is consul. Discovery is however pluggable so you can use  | ||||||
|  | etcd, kubernetes, zookeeper, etc. Plugins are in [micro/go-plugins](https://github.com/micro/go-plugins). | ||||||
|  |  | ||||||
| ### Multicast DNS | ### Multicast DNS | ||||||
|  |  | ||||||
| We can use multicast DNS with the built in MDNS registry for a zero dependency configuration.  | [Multicast DNS](https://en.wikipedia.org/wiki/Multicast_DNS) can alternatively be used for service discovery as a zero dependency configuration.  | ||||||
|  |  | ||||||
| Just pass `--registry=mdns` to any command | Pass `--registry=mdns` to any command or the enviroment variable MICRO_REGISTRY=mdns | ||||||
| ``` | ``` | ||||||
| $ go run main.go --registry=mdns | go run main.go --registry=mdns | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Consul | ### Consul | ||||||
| @@ -71,7 +73,11 @@ docker run consul | |||||||
| ### Run Service | ### Run Service | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| $ go get github.com/micro/examples/service && service | go get github.com/micro/examples/service && service | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Output | ||||||
|  | ``` | ||||||
| 2016/03/14 10:59:14 Listening on [::]:50137 | 2016/03/14 10:59:14 Listening on [::]:50137 | ||||||
| 2016/03/14 10:59:14 Broker Listening on [::]:50138 | 2016/03/14 10:59:14 Broker Listening on [::]:50138 | ||||||
| 2016/03/14 10:59:14 Registering node: greeter-ca62b017-e9d3-11e5-9bbb-68a86d0d36b6 | 2016/03/14 10:59:14 Registering node: greeter-ca62b017-e9d3-11e5-9bbb-68a86d0d36b6 | ||||||
| @@ -79,18 +85,25 @@ $ go get github.com/micro/examples/service && service | |||||||
|  |  | ||||||
| ### Call Service | ### Call Service | ||||||
| ``` | ``` | ||||||
| $ service --run_client | service --run_client | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Output | ||||||
|  | ``` | ||||||
| Hello John | Hello John | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ## Writing a service | ## Writing a service | ||||||
|  |  | ||||||
|  | This is a simple greeter RPC service example | ||||||
|  |  | ||||||
|  | Find this example at [examples/service](https://github.com/micro/examples/tree/master/service). | ||||||
|  |  | ||||||
| ### Create service proto | ### Create service proto | ||||||
|  |  | ||||||
| One of the key requirements of microservices is strongly defined interfaces so we utilised protobuf to define the handler and request/response.  | One of the key requirements of microservices is strongly defined interfaces. Micro uses protobuf to achieve this. | ||||||
| Here's a definition for the Greeter handler with the method Hello which takes a HelloRequest and HelloResponse both with one string arguments. |  | ||||||
|  |  | ||||||
| `go-micro/examples/service/proto/greeter.proto`: | Here we define the Greeter handler with the method Hello. It takes a HelloRequest and HelloResponse both with one string arguments. | ||||||
|  |  | ||||||
| ```proto | ```proto | ||||||
| syntax = "proto3"; | syntax = "proto3"; | ||||||
| @@ -110,28 +123,33 @@ message HelloResponse { | |||||||
|  |  | ||||||
| ### Install protobuf | ### Install protobuf | ||||||
|  |  | ||||||
| We use a protobuf plugin for code generation. This is completely optional. Look at [examples/server](https://github.com/micro/examples/blob/master/server/main.go)  | Install [protobuf](https://developers.google.com/protocol-buffers/) | ||||||
| and [examples/client](https://github.com/micro/examples/blob/master/client/main.go) for examples without code generation. |  | ||||||
|  | Now install the micro fork of protoc-gen-go. The protobuf compiler for Go.  | ||||||
|  |  | ||||||
| ```shell | ```shell | ||||||
| go get github.com/micro/protobuf/{proto,protoc-gen-go} | go get github.com/micro/protobuf/{proto,protoc-gen-go} | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| There's still a need for proto compiler to generate Go stub code from our proto file. You can either use the micro fork above or the official repo `github.com/golang/protobuf`. | ### Generate the proto | ||||||
|  |  | ||||||
| ### Compile the proto | After writing the proto definition we must compile it using protoc with the micro plugin. | ||||||
|  |  | ||||||
| ```shell | ```shell | ||||||
| protoc -I$GOPATH/src --go_out=plugins=micro:$GOPATH/src \ | protoc -I$GOPATH/src --go_out=plugins=micro:$GOPATH/src \ | ||||||
| 	$GOPATH/src/github.com/micro/examples/service/proto/greeter.proto | 	$GOPATH/src/github.com/micro/examples/service/proto/greeter.proto | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Define the service | ### Write the service | ||||||
|  |  | ||||||
| Below is the code sample for the Greeter service. It basically implements the interface defined above for the Greeter handler,  | Below is the code for the greeter service.  | ||||||
| initialises the service, registers the handler and then runs itself. Simple as that. |  | ||||||
|  |  | ||||||
| `go-micro/examples/service/main.go`: | It does the following: | ||||||
|  |  | ||||||
|  | 1. Implements the interface defined for the Greeter handler | ||||||
|  | 2. Initialises a micro.Service | ||||||
|  | 3. Registers the Greeter handler | ||||||
|  | 4. Runs the service | ||||||
|  |  | ||||||
| ```go | ```go | ||||||
| package main | package main | ||||||
| @@ -174,6 +192,10 @@ func main() { | |||||||
| ### Run service | ### Run service | ||||||
| ``` | ``` | ||||||
| go run examples/service/main.go | go run examples/service/main.go | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Output | ||||||
|  | ``` | ||||||
| 2016/03/14 10:59:14 Listening on [::]:50137 | 2016/03/14 10:59:14 Listening on [::]:50137 | ||||||
| 2016/03/14 10:59:14 Broker Listening on [::]:50138 | 2016/03/14 10:59:14 Broker Listening on [::]:50138 | ||||||
| 2016/03/14 10:59:14 Registering node: greeter-ca62b017-e9d3-11e5-9bbb-68a86d0d36b6 | 2016/03/14 10:59:14 Registering node: greeter-ca62b017-e9d3-11e5-9bbb-68a86d0d36b6 | ||||||
| @@ -181,10 +203,9 @@ go run examples/service/main.go | |||||||
|  |  | ||||||
| ### Define a client | ### Define a client | ||||||
|  |  | ||||||
| Below is the client code to query the greeter service. Notice we're using the code generated client interface `proto.NewGreeterClient`.  | Below is the client code to query the greeter service.  | ||||||
| This reduces the amount of boiler plate code we need to write. The greeter client can be reused throughout the code if need be. |  | ||||||
|  |  | ||||||
| `client.go` | The generated proto includes a greeter client to reduce boilerplate code. | ||||||
|  |  | ||||||
| ```go | ```go | ||||||
| package main | package main | ||||||
| @@ -220,13 +241,18 @@ func main() { | |||||||
|  |  | ||||||
| ```shell | ```shell | ||||||
| go run client.go | go run client.go | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | Output | ||||||
|  | ``` | ||||||
| Hello John | Hello John | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ## Writing a Function | ## Writing a Function | ||||||
|  |  | ||||||
| Go Micro includes the Function programming model. This is the notion of a one time executing Service which operates much like a service except exiting  | Go Micro includes the Function programming model.  | ||||||
| after completing a request. A function is defined much like a service and called in exactly the same way. |  | ||||||
|  | A Function is a one time executing Service which exits after completing a request.  | ||||||
|  |  | ||||||
| ### Defining a Function | ### Defining a Function | ||||||
|  |  | ||||||
| @@ -265,13 +291,13 @@ func main() { | |||||||
|  |  | ||||||
| It's that simple. | It's that simple. | ||||||
|  |  | ||||||
| ## How does it work? | ## How it works | ||||||
|  |  | ||||||
| <p align="center"> | <p align="center"> | ||||||
|   <img src="go-micro.png" /> |   <img src="go-micro.png" /> | ||||||
| </p> | </p> | ||||||
|  |  | ||||||
| Go Micro is a framework that addresses the fundamental requirements to write microservices.  | Go Micro is a framework that addresses the fundamental requirements for writing microservices.  | ||||||
|  |  | ||||||
| Let's dig into the core components. | Let's dig into the core components. | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user