Skip to content

Commit 99799d6

Browse files
add runnable examples
1 parent 4e4f9ed commit 99799d6

3 files changed

Lines changed: 115 additions & 0 deletions

File tree

examples/cron/main.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main
2+
3+
import (
4+
"log"
5+
6+
"github.com/MohamedAklamaash/relay"
7+
)
8+
9+
func main() {
10+
scheduler := relay.NewScheduler(relay.RedisClientOpt{Addr: "127.0.0.1:6379"}, nil)
11+
12+
if _, err := scheduler.Register("*/1 * * * *", relay.NewTask("report:build", []byte(`{"kind":"minutely"}`))); err != nil {
13+
log.Fatal(err)
14+
}
15+
if _, err := scheduler.Register("0 * * * *", relay.NewTask("email:send", []byte(`{"to":"ops@example.com","subject":"hourly"}`)), relay.Queue("critical")); err != nil {
16+
log.Fatal(err)
17+
}
18+
19+
if err := scheduler.Run(); err != nil {
20+
log.Fatal(err)
21+
}
22+
}

examples/producer/main.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"log"
6+
"time"
7+
8+
"github.com/MohamedAklamaash/relay"
9+
)
10+
11+
type EmailPayload struct {
12+
To string `json:"to"`
13+
Subject string `json:"subject"`
14+
}
15+
16+
func main() {
17+
client := relay.NewClient(relay.RedisClientOpt{Addr: "127.0.0.1:6379"})
18+
defer client.Close()
19+
20+
payload, _ := json.Marshal(EmailPayload{To: "user@example.com", Subject: "welcome"})
21+
22+
now, err := client.Enqueue(relay.NewTask("email:send", payload), relay.Queue("critical"))
23+
if err != nil {
24+
log.Fatal(err)
25+
}
26+
log.Printf("enqueued immediate task %s", now.ID)
27+
28+
later, err := client.Enqueue(
29+
relay.NewTask("report:build", []byte(`{"month":"june"}`)),
30+
relay.ProcessIn(10*time.Second),
31+
relay.MaxRetry(5),
32+
)
33+
if err != nil {
34+
log.Fatal(err)
35+
}
36+
log.Printf("enqueued delayed task %s for %s", later.ID, later.NextProcessAt.Format(time.RFC3339))
37+
38+
_, err = client.Enqueue(
39+
relay.NewTask("email:send", payload),
40+
relay.Queue("critical"),
41+
relay.Unique(time.Minute),
42+
)
43+
if err != nil {
44+
log.Printf("second unique enqueue rejected as expected: %v", err)
45+
}
46+
}

examples/worker/main.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"log"
7+
"net/http"
8+
9+
"github.com/MohamedAklamaash/relay"
10+
)
11+
12+
type EmailPayload struct {
13+
To string `json:"to"`
14+
Subject string `json:"subject"`
15+
}
16+
17+
func main() {
18+
srv := relay.NewServer(relay.RedisClientOpt{Addr: "127.0.0.1:6379"}, relay.Config{
19+
Concurrency: 10,
20+
Queues: map[string]int{"critical": 6, "default": 3, "low": 1},
21+
})
22+
23+
mux := relay.NewServeMux()
24+
mux.HandleFunc("email:send", handleEmail)
25+
mux.HandleFunc("report:build", handleReport)
26+
27+
http.Handle("/metrics", relay.MetricsHandler())
28+
go http.ListenAndServe(":2112", nil)
29+
30+
if err := srv.Run(mux); err != nil {
31+
log.Fatal(err)
32+
}
33+
}
34+
35+
func handleEmail(ctx context.Context, t *relay.Task) error {
36+
var p EmailPayload
37+
if err := json.Unmarshal(t.Payload(), &p); err != nil {
38+
return err
39+
}
40+
log.Printf("sending email to %s: %s", p.To, p.Subject)
41+
return nil
42+
}
43+
44+
func handleReport(ctx context.Context, t *relay.Task) error {
45+
log.Printf("building report: %s", string(t.Payload()))
46+
return nil
47+
}

0 commit comments

Comments
 (0)