当前位置:网站首页>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}边栏推荐
- Empty encoded password warning reason
- 用一个软件纪念自己故去的母亲,这或许才是程序员最大的浪漫吧
- [SPRS J P & RS 2022] small target detection module: a normalized Gaussian Wasserstein distance for tiny object detection
- Is it safe to open an account for shares of tongdaxin?
- Map data types in golang
- numpy. linalg. Lstsq (a, B, rcond=-1) parsing
- 【小程序】相对路径和绝对路径的表示符
- Echo framework: automatically add requestid
- 飞桨产业级开源模型库:加速企业AI任务开发与应用
- 解决base64压缩文件,经过post请求解压出来是空格的问题
猜你喜欢

Common core resource objects of kubernetes
Shengdun technology joined dragon lizard community to build a new open source ecosystem

What should I pay attention to in the interview of artificial intelligence technology?

C语言:利用自定义函数排序
![[ICPR 2021] tiny object detection in aerial images](/img/40/6d346f357a858f3787eeba58262801.png)
[ICPR 2021] tiny object detection in aerial images

CVPR2022 | 可精简域适应

What problems need to be solved by MES management system in the era of intelligent manufacturing

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

C语言:结构体数组实现找出最低分学生记录

C language: sorting with custom functions
随机推荐
C language: structure array implementation to find the lowest student record
Messy knowledge points
【ICCV Workshop 2021】基于密度图的小目标检测:Coarse-grained Density Map Guided Object Detection in Aerial Images
实时计算框架:Flink集群搭建与运行机制
股票网上开户安全吗?需要满足什么条件?
用一个软件纪念自己故去的母亲,这或许才是程序员最大的浪漫吧
Vs2022 save formatting plug-in
An accident caused by a MySQL misoperation, and the "high availability" cannot withstand it!
version `ZLIB_1.2.9‘ not found (required by /lib64/libpng16.so.16)
LSF opens job idle information to view the CPU time/elapse time usage of the job
Echo framework: automatically add requestid
[machine learning] linear regression prediction
Longest substring without duplicate characters
Experience summary of 9 Android interviews, bytes received, Ali, advanced Android interview answer
2021-11-21: map[i][j] = = 0, which means that (I, J) is an ocean. If you cross it, the cost will be
Version ` zlib 1.2.9 "not found (required by / lib64 / libpng16.so.16)
skywalking 安装部署实践
Error reported using worker: uncaught domexception: failed to construct 'worker': script at***
What should I pay attention to in the interview of artificial intelligence technology?
跨域和JSONP