33 lines
675 B
Go
33 lines
675 B
Go
package producer
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
)
|
|
|
|
// RedisProducer represents a redis producer.
|
|
type RedisProducer struct {
|
|
client *redis.Client
|
|
channel string
|
|
}
|
|
|
|
// NewRedisProducer returns a PushFunc that pushes NotificationEvent to redis.
|
|
func NewRedisProducer(c *redis.Client, channel string) *RedisProducer {
|
|
|
|
return &RedisProducer{
|
|
client: c,
|
|
channel: channel,
|
|
}
|
|
}
|
|
|
|
// Push pushes a NotificationEvent to redis.
|
|
func (p *RedisProducer) Push(ctx context.Context, n *Notification) error {
|
|
body, err := json.Marshal(n.Event)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return p.client.Publish(ctx, p.channel, string(body)).Err()
|
|
}
|