mirror of
https://github.com/hibiken/asynq.git
synced 2025-04-22 16:50:18 +08:00
add example
This commit is contained in:
parent
e869722b70
commit
cb720fc10b
35
x/rate/example_test.go
Normal file
35
x/rate/example_test.go
Normal file
@ -0,0 +1,35 @@
|
||||
package rate_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/hibiken/asynq"
|
||||
"github.com/hibiken/asynq/x/rate"
|
||||
)
|
||||
|
||||
type RateLimitError struct {
|
||||
RetryIn time.Duration
|
||||
}
|
||||
|
||||
func (e *RateLimitError) Error() string {
|
||||
return fmt.Sprintf("rate limited (retry in %v)", e.RetryIn)
|
||||
}
|
||||
|
||||
func ExampleNewSemaphore() {
|
||||
redisConnOpt := asynq.RedisClientOpt{Addr: ":6379"}
|
||||
sema := rate.NewSemaphore(redisConnOpt, "my_queue", 10)
|
||||
// call sema.Close() when appropriate
|
||||
|
||||
_ = asynq.HandlerFunc(func(ctx context.Context, task *asynq.Task) error {
|
||||
if !sema.Acquire(ctx) {
|
||||
return &RateLimitError{RetryIn: 30 * time.Second}
|
||||
}
|
||||
// Make sure to release the token once we're done.
|
||||
defer sema.Release(ctx)
|
||||
|
||||
// Process task
|
||||
return nil
|
||||
})
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user