【问题标题】:Using Gin and JobRunner使用 Gin 和 JobRunner
【发布时间】: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

标签: mongodb go mgo go-gin


【解决方案1】:

您可以使用 jobrunner.Now(NowDo{}) 并将 gin 上下文传递给它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2016-08-17
    • 1970-01-01
    • 2012-03-13
    相关资源
    最近更新 更多