Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // poller.go
- package main
- import (
- "fmt"
- "os"
- "os/signal"
- "time"
- "github.com/fzzy/radix/redis"
- )
- var redisConn *redis.Client
- func init() {
- var err error
- if redisConn, err = redis.Dial("tcp", "127.0.0.1:6379"); err != nil {
- panic(err)
- }
- }
- // Poll checks Redis to determine whether scheduled tasks need to be run or not.
- func Poll(interval time.Duration, done <-chan os.Signal) {
- ticker := time.NewTicker(interval)
- for {
- select {
- case <-ticker.C:
- fmt.Print("> Checking for scheduled tasks... ")
- nowUnix := time.Now().Unix()
- response := redisConn.Cmd("ZRANGEBYSCORE", "jobs:scheduled", "-inf", float64(nowUnix))
- tasks, _ := response.List()
- if len(tasks) == 0 {
- fmt.Println("No tasks found.")
- }
- for _, task := range tasks {
- fmt.Printf("Queue task: %s\n", task)
- // do something awesome
- // after delete task
- redisConn.Cmd("ZREM", "jobs:scheduled", task)
- }
- case <-done:
- fmt.Println("Shutting down poller")
- return
- }
- }
- }
- func main() {
- c := make(chan os.Signal)
- signal.Notify(c, os.Interrupt)
- fmt.Println("Polling Redis every 15 seconds for scheduled tasks...")
- Poll(15 * time.Second, c)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement