Files
go-caatsm/internal/nats/pub.go
T
windyboy 8a4c46aa34 update handler (#2)
* 🔧 Remove commented-out regex patterns and initialization in config.

*  Add NATS message publisher with configuration 📩🚀

*  Add new PlainTextMarshaler and refactor handler in nats package.
2024-08-12 17:47:34 +08:00

49 lines
1.4 KiB
Go

package nats
import (
"caatsm/internal/config"
"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"
)
func Publish(config *config.Config, parsedMessage interface{}) error {
logger := watermill.NewStdLogger(false, false)
options := []nc.Option{
nc.RetryOnFailedConnect(true),
nc.Timeout(config.Timeouts.Server),
nc.ReconnectWait(config.Timeouts.ReconnectWait),
}
jsConfig := nats.JetStreamConfig{Disabled: true}
publisher, err := nats.NewPublisher(
nats.PublisherConfig{
URL: config.Nats.URL,
NatsOptions: options,
JetStream: jsConfig,
},
logger,
)
if err != nil {
panic(err)
}
logger.Info("NATS server connected", map[string]interface{}{"url": config.Nats.URL})
logger.Info("Publishing message to NATS topic", map[string]interface{}{"topic": config.Publisher.Topic})
messageText, err := json.Marshal(parsedMessage)
if err != nil {
logger.Error("Failed to marshal message", err, map[string]interface{}{"message": parsedMessage})
}
msg := message.NewMessage(watermill.NewUUID(), []byte(messageText))
err = publisher.Publish(config.Publisher.Topic, msg)
if err != nil {
logger.Error("Failed to publish message to NATS topic", err, map[string]interface{}{"topic": config.Publisher.Topic})
return err
}
return nil
}