【发布时间】:2018-07-11 11:42:26
【问题描述】:
我正在使用 JobRunner 作为我的 Golang 项目的调度程序和 Gin-gonic 框架。
我已经尝试过这个包,它可以工作。问题是,当我想连接到我的数据库时,我无法访问 schedule 函数中的 gin 上下文
func ScheduleUrl() {
jobrunner.Start() // optional: jobrunner.Start(pool int, concurrent int) (10, 1)
jobrunner.Schedule("@every 20s", CheckExpiredUrl{})
}
// Job Specific Functions
type CheckExpiredUrl struct {
// filtered
}
// ReminderEmails.Run() will get triggered automatically.
func (e CheckExpiredUrl) Run() {
// Queries the DB
// Sends some email
fmt.Println("Every 20 sec Check Expired Url ")
db := c.MustGet("db").(*mgo.Database)
urls := []models.Url{}
err := db.C(models.CollectionUrl).Find(nil).Sort("-expired_at").All(&urls)
if err != nil {
c.Error(err)
}
}
我需要在jobrunner函数中使用c *gin.Context,我应该怎么做?
【问题讨论】:
-
一个
context是根据请求定义的,即每次服务器接收到HTTP请求时都会创建它。通常它只从请求的开始到结束才有效。因此,将上下文传递给后台作业并不是一个好习惯。你想从上下文中得到什么信息? -
我只想从我的上下文中获取我的会话集,还有其他方法吗?
-
一种方法是:使用中间件。在中间件中,您可以访问
gin.Context并提取所需信息。获得信息后,将其发布到 后台作业/任务,例如通过渠道。见Custom Middleware