简单示例
stringsvc 教程
https://github.com/go-kit/examples
基本原则
1 2 3 |
|
新建 main.go
业务逻辑 service
在 Go kit 中,我们将服务建模为接口
1 2 3 4 5 6 7 |
|
接口的实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
请求和响应
在 Go kit 中主要的通信方式是 RPC,接口中的每个方法会被建模为一个远程过程调用。
对于每个方法,我们定义请求和响应的结构体,分别涵盖所有的输入和输出参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
端点 Endpoints
端点的定义如下所示 (不需要自己写代码, go-kit 提供了这个定义):
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
通信方式 Transports
这里使用 JSON 来通信
执行如下命令下载 transport/http
:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
stringsvc1
1 |
|
1 2 3 4 |
|
中间件
关注点分离
Place your services into a service.go
file with the following functions and types.
service.go
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
Place your transports into a transport.go
file with the following functions and types.
transport.go
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
Transport logging
A middleware is a function that takes an endpoint and returns an endpoint.
1 |
|
Below you can see how a basic logging middleware could be implemented (you don’t need to copy/paste this code anywhere):
1 2 3 4 5 6 7 8 9 |
|
Use the go-kit log package and remove the standard libraries log. You will need to remove log.Fatal
from the bottom of the main.go
file.
1 2 3 |
|
And wire it into each of our handlers. Note that the next code section will not compile until you follow the Application Logging
section, which defines loggingMiddleware
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
Application logging
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
|
Application instrumentation
In Go kit, instrumentation means using package metrics
to record statistics about your service’s runtime behavior.
Counting the number of jobs processed, recording the duration of requests after they’ve finished, and tracking the number of in-flight operations would all be considered instrumentation.
We can use the same middleware pattern that we used for logging.
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
|
stringsvc2
The complete service so far is stringsvc2
.
运行服务:
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
服务的 log:
1 2 3 |
|