67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package natsio
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/logrusorgru/aurora"
|
|
"github.com/nats-io/nats.go"
|
|
)
|
|
|
|
var (
|
|
natsClient *nats.Conn
|
|
natsJS nats.JetStreamContext
|
|
)
|
|
|
|
// Connect ...
|
|
func Connect(cfg Config) error {
|
|
if cfg.URL == "" {
|
|
return errors.New("connect URL is required")
|
|
}
|
|
|
|
// Connect options
|
|
opts := make([]nats.Option, 0)
|
|
|
|
// Has authentication
|
|
if cfg.User != "" {
|
|
opts = append(opts, nats.UserInfo(cfg.User, cfg.Password))
|
|
}
|
|
|
|
// If it has TLS
|
|
if cfg.TLS != nil {
|
|
opts = append(opts, nats.ClientCert(cfg.TLS.CertFilePath, cfg.TLS.KeyFilePath))
|
|
opts = append(opts, nats.RootCAs(cfg.TLS.RootCAFilePath))
|
|
}
|
|
|
|
nc, err := nats.Connect(cfg.URL, opts...)
|
|
if err != nil {
|
|
msg := fmt.Sprintf("error when connecting to NATS: %s", err.Error())
|
|
return errors.New(msg)
|
|
}
|
|
|
|
fmt.Println(aurora.Green("*** CONNECTED TO NATS: " + cfg.URL))
|
|
|
|
// Set client
|
|
natsClient = nc
|
|
|
|
// Create jet stream context
|
|
js, err := natsClient.JetStream(nats.PublishAsyncMaxPending(256))
|
|
if err != nil {
|
|
msg := fmt.Sprintf("error when create NATS JetStream: %s", err.Error())
|
|
return errors.New(msg)
|
|
}
|
|
natsJS = js
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetClient ...
|
|
func GetClient() *nats.Conn {
|
|
return natsClient
|
|
}
|
|
|
|
// GetJetStream ...
|
|
func GetJetStream() nats.JetStreamContext {
|
|
return natsJS
|
|
}
|