68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package worker
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"time"
|
|
|
|
"github.com/nats-io/nats.go"
|
|
)
|
|
|
|
type Handler func(context.Context, *nats.Msg) error
|
|
|
|
type Option func(*config)
|
|
|
|
type config struct {
|
|
streamName string
|
|
consumerName string
|
|
durableName string
|
|
handler Handler
|
|
concurrency int
|
|
ackWait time.Duration
|
|
maxDeliver int
|
|
filterSubject string
|
|
deliverPolicy nats.DeliverPolicy
|
|
replayPolicy nats.ReplayPolicy
|
|
log *slog.Logger
|
|
storage nats.StorageType
|
|
}
|
|
|
|
func WithStream(name string) Option {
|
|
return func(c *config) { c.streamName = name }
|
|
}
|
|
|
|
func WithConsumer(consumer, subject string) Option {
|
|
return func(c *config) {
|
|
c.consumerName = consumer
|
|
c.filterSubject = subject
|
|
}
|
|
}
|
|
|
|
func WithDurable(name string) Option {
|
|
return func(c *config) { c.durableName = name }
|
|
}
|
|
|
|
func WithHandler(h Handler) Option {
|
|
return func(c *config) { c.handler = h }
|
|
}
|
|
|
|
func WithConcurrency(n int) Option {
|
|
return func(c *config) { c.concurrency = n }
|
|
}
|
|
|
|
func WithAckWait(d time.Duration) Option {
|
|
return func(c *config) { c.ackWait = d }
|
|
}
|
|
|
|
func WithMaxDeliver(n int) Option {
|
|
return func(c *config) { c.maxDeliver = n }
|
|
}
|
|
|
|
func WithLogger(l *slog.Logger) Option {
|
|
return func(c *config) { c.log = l }
|
|
}
|
|
|
|
func WithStorage(storage nats.StorageType) Option {
|
|
return func(c *config) { c.storage = storage }
|
|
}
|