Files
go-caatsm/internal/nats/pub.go
T

55 lines
1.3 KiB
Go
Raw Normal View History

2024-08-12 17:47:34 +08:00
package nats
import (
"caatsm/internal/config"
2024-08-14 11:48:18 +08:00
"caatsm/pkg/utils"
2024-08-12 17:47:34 +08:00
"encoding/json"
"github.com/ThreeDotsLabs/watermill"
"github.com/ThreeDotsLabs/watermill-nats/v2/pkg/nats"
"github.com/ThreeDotsLabs/watermill/message"
nc "github.com/nats-io/nats.go"
)
2024-08-14 11:48:18 +08:00
type NatsPublisher struct {
config *config.Config
publisher *nats.Publisher
}
func NewPub(config *config.Config) *NatsPublisher {
2024-08-12 17:47:34 +08:00
logger := watermill.NewStdLogger(false, false)
2024-08-14 11:48:18 +08:00
jsConfig := nats.JetStreamConfig{Disabled: true}
2024-08-12 17:47:34 +08:00
options := []nc.Option{
nc.RetryOnFailedConnect(true),
nc.Timeout(config.Timeouts.Server),
nc.ReconnectWait(config.Timeouts.ReconnectWait),
}
2024-08-14 11:48:18 +08:00
publisher, _ := nats.NewPublisher(
2024-08-12 17:47:34 +08:00
nats.PublisherConfig{
URL: config.Nats.URL,
NatsOptions: options,
JetStream: jsConfig,
2024-08-14 11:48:18 +08:00
}, logger)
return &NatsPublisher{
config: config,
publisher: publisher,
2024-08-12 17:47:34 +08:00
}
2024-08-14 11:48:18 +08:00
}
2024-08-12 17:47:34 +08:00
2024-08-14 11:48:18 +08:00
func (n *NatsPublisher) Publish(parsedMessage interface{}) error {
logger := utils.GetSugaredLogger()
2024-08-12 17:47:34 +08:00
messageText, err := json.Marshal(parsedMessage)
if err != nil {
2024-08-14 11:48:18 +08:00
logger.Errorf("Failed to marshal message: %v", err)
2024-08-12 17:47:34 +08:00
}
msg := message.NewMessage(watermill.NewUUID(), []byte(messageText))
2024-08-14 11:48:18 +08:00
err = n.publisher.Publish(n.config.Publisher.Topic, msg)
2024-08-12 17:47:34 +08:00
if err != nil {
2024-08-14 11:48:18 +08:00
logger.Errorf("Failed to publish message: %v", err)
2024-08-12 17:47:34 +08:00
return err
}
return nil
}