-
Notifications
You must be signed in to change notification settings - Fork 1
/
bootstrap.go
71 lines (65 loc) · 1.56 KB
/
bootstrap.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package bootstrap
import (
"fmt"
"github.com/caarlos0/env/v10"
"github.com/nats-io/nats.go"
"github.com/nats-io/nkeys"
"github.com/weplanx/schedule/common"
"go.uber.org/zap"
"os"
"strings"
)
func LoadStaticValues() (values *common.Values, err error) {
values = new(common.Values)
if err = env.Parse(values); err != nil {
return
}
return
}
func UseZap() (log *zap.Logger, err error) {
if os.Getenv("MODE") != "release" {
if log, err = zap.NewDevelopment(); err != nil {
return
}
} else {
if log, err = zap.NewProduction(); err != nil {
return
}
}
return
}
func UseNats(values *common.Values) (nc *nats.Conn, err error) {
var kp nkeys.KeyPair
if kp, err = nkeys.FromSeed([]byte(values.Nats.Nkey)); err != nil {
return
}
defer kp.Wipe()
var pub string
if pub, err = kp.PublicKey(); err != nil {
return
}
if !nkeys.IsValidPublicUserKey(pub) {
return nil, fmt.Errorf("nkey verification failed")
}
if nc, err = nats.Connect(
strings.Join(values.Nats.Hosts, ","),
nats.RetryOnFailedConnect(true),
nats.MaxReconnects(-1),
nats.Nkey(pub, func(nonce []byte) ([]byte, error) {
sig, _ := kp.Sign(nonce)
return sig, nil
}),
); err != nil {
return
}
return
}
func UseJetStream(nc *nats.Conn) (nats.JetStreamContext, error) {
return nc.JetStream(nats.PublishAsyncMaxPending(256))
}
func UseKeyValue(values *common.Values, js nats.JetStreamContext) (nats.KeyValue, error) {
return js.CreateKeyValue(&nats.KeyValueConfig{
Bucket: fmt.Sprintf(`schedules_%s`, values.Node),
Description: "Schedule message event publishing node",
})
}