Administrator
发布于 2023-11-30 / 118 阅读
0
0

Go语言实现简单的http心跳程序包

Go语言实现简单的http心跳程序包

介绍

在开发web应用的过程中,我们经常需要检测服务的可用性和性能,以及处理故障和异常。一种常用的方法是使用http心跳,即定期向服务发送http请求,根据响应的状态码和时间来判断服务的状态。http心跳可以用来实现服务的健康检查,负载均衡,故障转移,监控报警等功能。

最近正好在学习Go语言,正好业务需要多个的Go原生程序去处理。就顺手基于Go语言实现了一个简单的http心跳程序包,名为 go-heartbeat。这个程序包可以快速实现简单的心跳服务,兼容go原生http和gin等web框架快速使用。这个程序包的特点有:

  • 简单易用,只需几行代码就可以创建一个心跳服务

安装

要使用 go-heartbeat程序包,你需要先安装Go语言环境,版本至少为1.16。然后,你可以使用 go get命令来下载和安装 go-heartbeat程序包:

go get github.com/loyete/go-heartbeat

使用

创建一个心跳服务

要创建一个心跳服务,需要先导入 go-heartbeat程序包,然后使用 HeartbeatHandler函数来创建一个心跳http服务:

package main

import (
	"github.com/loyete/go-heartbeat/heartbeat"
	"net/http"
)

func main() {
	http.HandleFunc("/heartbeat", heartbeat.HeartbeatHandler)
	http.ListenAndServe(":8080", nil)
}

兼容web框架

在创建心跳的时候,发现有的应用使用的go原生http方式,有的应用则使用了gin等web框架,所以就兼容处理了一下。只需将心跳对象的 Handler方法作为一个http处理函数,注册到路由中即可。

package main

import (
	"github.com/gin-gonic/gin"
	"github.com/loyete/go-heartbeat/heartbeat"
)

func main() {
	r := gin.Default()
	r.GET("/heartbeat",gin.WrapF(heartbeat.HeartbeatHandler))
	r.Run(":8080")
}

原理

实现的方式非常的简单,实际就是创建一个简单的http请求,客户端请求收到响应之后即认为服务正常。

// HeartbeatHandler
// heartbeat
// http.HandleFunc("/heartbeat", heartbeat.HeartbeatHandler)
// use gin
// gin.GET("/heartbeat", gin.WrapF(heartbeat.HeartbeatHandler))
// return json:
//
//	{
//		"status": "OK",
//		"running_time": "25天3小时27分13秒"
//	}
func HeartbeatHandler(w http.ResponseWriter, r *http.Request) {
	uptime := formatDuration(time.Since(startTime))
	response := HeartbeatResponse{
		Status:      "running",
		RunningTime: uptime,
	}
	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(response)
}

结语

这篇博客介绍了我基于Go语言实现的简单的http心跳程序包 go-heartbeat,以及它的使用方法和特点。这个程序包可以快速实现简单的心跳服务。后续还应该考虑使其更加灵活,允许自定义心跳的请求和响应的格式,以及处理不同的状态码和异常。目前还是go小白状态,慢慢加油学习吧。

如果你对这个程序包感兴趣,欢迎访问[我的GitHub]查看源码和文档,也欢迎给我提出意见和建议,或者参与贡献。谢谢你的阅读!


评论