当前位置:网站首页>Gin framework: automatically add requestid
Gin framework: automatically add requestid
2022-06-24 01:05:00 【Trespass 】
Introduce
Through a complete example , stay Gin In the frame , For every one API Automatic addition RequestId .
We will use rk-boot To start up Gin Framework microservices .
Please visit the following address for a complete tutorial :
install
go get github.com/rookie-ninja/rk-boot go get github.com/rookie-ninja/rk-gin
Quick start
Open the meta After middleware , Each request will automatically contain the following values .
Header key | details |
|---|---|
X-Request-Id | The middleware will automatically generate the request ID. |
X-Prefix-App | The service name . |
X-Prefix-App-Version | Service version . |
X-Prefix-App-Unix-Time | Current service Unix Time . |
X-Prefix-Request-Received-Time | Timestamp of the request received . |
1. establish boot.yaml
In order to verify , We started commonService,commonService Contains a series of commonly used API, for example /rk/v1/healthy.
---
gin:
- name: greeter # Required
port: 8080 # Required
enabled: true # Required
commonService:
enabled: true # Optional, enable common service
interceptors:
meta:
enabled: true # Optional, enable meta middleware2. establish main.go
// Copyright (c) 2021 rookie-ninja
//
// Use of this source code is governed by an Apache-style
// license that can be found in the LICENSE file.
package main
import (
"context"
"github.com/rookie-ninja/rk-boot"
_ "github.com/rookie-ninja/rk-gin/boot"
)
// Application entrance.
func main() {
// Create a new boot instance.
boot := rkboot.NewBoot()
// Bootstrap
boot.Bootstrap(context.Background())
// Wait for shutdown sig
boot.WaitForShutdownSig(context.Background())
}3. start-up main.go
$ go run main.go
4. verification
$ curl -vs -X GET localhost:8080/rk/v1/healthy
...
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=utf-8
< X-Request-Id: 78c25a06-3b34-4ecb-b9dd-7197078873c7
< X-Rk-App-Name: rk-demo
< X-Rk-App-Unix-Time: 2021-11-21T00:24:49.662023+08:00
< X-Rk-App-Version: master-2c9c6fd
< X-Rk-Received-Time: 2021-11-21T00:24:49.662023+08:00
...
{"healthy":true}Cover requestId
If we want to customize requestId, Need to add a Header.
func Greeter(ctx *gin.Context) {
// Override request id
rkginctx.SetHeaderToClient(ctx, rkginctx.RequestIdKey, "request-id-override")
// We expect new request id attached to logger
rkginctx.GetLogger(ctx).Info("Received request")
ctx.JSON(http.StatusOK, &GreeterResponse{
Message: fmt.Sprintf("Hello %s!", ctx.Query("name")),
})
}
// Response.
type GreeterResponse struct {
Message string
}RequestId Will be covered .
$ curl -vs -X GET "localhost:8080/v1/greeter?name=rk-dev"
...
< X-Request-Id: request-id-override
< X-Rk-App-Name: rk-demo
< X-Rk-App-Unix-Time: 2021-11-21T00:37:16.514685+08:00
< X-Rk-App-Version: master-2c9c6fd
< X-Rk-Received-Time: 2021-11-21T00:37:16.514685+08:00
...
{"Message":"Hello rk-dev!"}If we start the logging middleware , Then we will see the following log .
2021-11-21T00:39:04.605+0800 INFO basic/main.go:54 Received request {"requestId": "request-id-override"}------------------------------------------------------------------------
endTime=2021-11-21T00:39:04.605647+08:00
startTime=2021-11-21T00:39:04.605483+08:00
elapsedNano=164096
timezone=CST
ids={"eventId":"request-id-override","requestId":"request-id-override"}
app={"appName":"rk-demo","appVersion":"master-2c9c6fd","entryName":"greeter","entryType":"GinEntry"}
env={"arch":"amd64","az":"*","domain":"*","hostname":"lark.local","localIP":"192.168.101.5","os":"darwin","realm":"*","region":"*"}
payloads={"apiMethod":"GET","apiPath":"/v1/greeter","apiProtocol":"HTTP/1.1","apiQuery":"name=rk-dev","userAgent":"curl/7.64.1"}
error={}
counters={}
pairs={}
timing={}
remoteAddr=localhost:61967
operation=/v1/greeter
resCode=200
eventStatus=Ended
EOECover header Prefix
---
gin:
- name: greeter
...
interceptors:
meta:
enabled: true # Enable meta middleware
prefix: "Override" # Override prefix which formed as X-[Prefix]-xxx$ curl -vs -X GET localhost:8080/rk/v1/healthy
...
< X-Override-App-Name: rk-demo
< X-Override-App-Unix-Time: 2021-11-21T00:40:15.761993+08:00
< X-Override-App-Version: master-2c9c6fd
< X-Override-Received-Time: 2021-11-21T00:40:15.761993+08:00
< X-Request-Id: 1449deb5-464d-4b65-8430-985413c2671b
...
{"healthy":true}边栏推荐
- 【CVPR 2022】高分辨率小目标检测:Cascaded Sparse Query for Accelerating High-Resolution Smal Object Detection
- GNN upper edge distributor! Instead of trying to refine pills, you might as well give your GNN some tricks
- Echo framework: automatically add requestid
- 通达信股票开户是安全的吗?
- 使用递归形成多级目录树结构,附带可能是全网最详细注释。
- [applet] when compiling the preview applet, a -80063 error prompt appears
- Open source model library of flying propeller industry: accelerating the development and application of enterprise AI tasks
- 【osg】OSG开发(04)—创建多个场景视图
- version `ZLIB_1.2.9‘ not found (required by /lib64/libpng16.so.16)
- Installation and use of winscp and putty
猜你喜欢
![Graduation project - thesis writing notes [design topic type, thesis writing details, design materials]](/img/66/c0c400609b56dd012d87c620ca66e4.png)
Graduation project - thesis writing notes [design topic type, thesis writing details, design materials]

使用递归形成多级目录树结构,附带可能是全网最详细注释。

The concept of TP FP TN FN in machine learning

Shardingsphere-proxy-5.0.0 implementation of capacity range partition (V)

An accident caused by a MySQL misoperation, and the "high availability" cannot withstand it!

985 Android programmers won the oral offer of Alibaba P6 in 40 days. After the successful interview, they sorted out these interview ideas

Perhaps the greatest romance of programmers is to commemorate their dead mother with a software

一次 MySQL 误操作导致的事故,「高可用」都顶不住了!

Cvpr2022 𞓜 thin domain adaptation

Alibaba interview question: multi thread related
随机推荐
C language: structure array implementation to find the lowest student record
股票网上开户安全吗?需要满足什么条件?
Arm learning (7) symbol table and debugging
985 Android programmers won the oral offer of Alibaba P6 in 40 days. After the successful interview, they sorted out these interview ideas
杂乱的知识点
解决base64压缩文件,经过post请求解压出来是空格的问题
If you want to open an account for stock trading, is it safe to open an account online-
这不会又是一个Go的BUG吧?
【Flutter】如何使用Flutter包和插件
Real time computing framework: Spark cluster setup and introduction case
通达信股票开户是安全的吗?
How to write peer-reviewed papers
MIP nerf: anti aliasing multiscale neural radiation field iccv2021
Cvpr2022 𞓜 thin domain adaptation
【小程序】实现双列商品效果
Zhongshanshan: engineers after being blasted will take off | ONEFLOW u
Open source model library of flying propeller industry: accelerating the development and application of enterprise AI tasks
The industrial Internet era will be realized by products, technologies and models derived from the industry itself
数字化工厂可以分为哪两类
Vs2022 save formatting plug-in