added nats + worker modules
This commit is contained in:
68
nats/nats.go
Normal file
68
nats/nats.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package nats
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/nats-io/nats-server/v2/server"
|
||||
"github.com/nats-io/nats.go"
|
||||
)
|
||||
|
||||
func New(opts ...Option) (*nats.Conn, func(), error) {
|
||||
cfg := &config{
|
||||
readyTimeout: 5 * time.Second,
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
opt(cfg)
|
||||
}
|
||||
|
||||
var nc *nats.Conn
|
||||
var shutdown func()
|
||||
|
||||
if cfg.externalURL != "" {
|
||||
var err error
|
||||
nc, err = nats.Connect(cfg.externalURL, cfg.connectOpts...)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
shutdown = func() { nc.Close() }
|
||||
return nc, shutdown, nil
|
||||
}
|
||||
|
||||
serverOpts := cfg.serverOpts
|
||||
if serverOpts == nil {
|
||||
serverOpts = &server.Options{
|
||||
Host: "127.0.0.1",
|
||||
Port: -1,
|
||||
NoLog: true,
|
||||
}
|
||||
}
|
||||
|
||||
s, err := server.NewServer(serverOpts)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
go s.Start()
|
||||
|
||||
if !s.ReadyForConnections(cfg.readyTimeout) {
|
||||
s.Shutdown()
|
||||
return nil, nil, ErrNotReady
|
||||
}
|
||||
|
||||
nc, err = nats.Connect(
|
||||
s.ClientURL(),
|
||||
append(cfg.connectOpts, nats.InProcessServer(s), nats.Name("embedded-client"))...,
|
||||
)
|
||||
if err != nil {
|
||||
s.Shutdown()
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
shutdown = func() {
|
||||
nc.Close()
|
||||
s.Shutdown()
|
||||
}
|
||||
|
||||
return nc, shutdown, nil
|
||||
}
|
||||
Reference in New Issue
Block a user