forked from liangdas/mqant
/
options.go
138 lines (115 loc) · 2.41 KB
/
options.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package server
import (
"context"
"github.com/liangdas/mqant/registry"
"time"
)
// Options Options
type Options struct {
Registry registry.Registry
Metadata map[string]string
Name string
Address string
Advertise string
ID string
Version string
RegisterInterval time.Duration
RegisterTTL time.Duration
// Other options for implementations of the interface
// can be stored in a context
Context context.Context
}
func newOptions(opt ...Option) Options {
opts := Options{
Metadata: map[string]string{},
}
for _, o := range opt {
o(&opts)
}
if opts.Registry == nil {
opts.Registry = registry.DefaultRegistry
}
if len(opts.Address) == 0 {
opts.Address = DefaultAddress
}
if len(opts.Name) == 0 {
opts.Name = DefaultName
}
if len(opts.ID) == 0 {
opts.ID = DefaultID
}
if len(opts.Version) == 0 {
opts.Version = DefaultVersion
}
return opts
}
// Name Server name
func Name(n string) Option {
return func(o *Options) {
o.Name = n
}
}
// Id Unique server id
// Deprecated: 因为命名规范问题函数将废弃,请用ID代替
func Id(id string) Option {
return func(o *Options) {
o.ID = id
}
}
// ID Unique server id
func ID(id string) Option {
return func(o *Options) {
o.ID = id
}
}
// Version of the service
func Version(v string) Option {
return func(o *Options) {
o.Version = v
}
}
// Address to bind to - host:port
func Address(a string) Option {
return func(o *Options) {
o.Address = a
}
}
// Advertise The address to advertise for discovery - host:port
func Advertise(a string) Option {
return func(o *Options) {
o.Advertise = a
}
}
// Registry used for discovery
func Registry(r registry.Registry) Option {
return func(o *Options) {
o.Registry = r
}
}
// Metadata associated with the server
func Metadata(md map[string]string) Option {
return func(o *Options) {
o.Metadata = md
}
}
// RegisterTTL Register the service with a TTL
func RegisterTTL(t time.Duration) Option {
return func(o *Options) {
o.RegisterTTL = t
}
}
// RegisterInterval specifies the interval on which to re-register
func RegisterInterval(t time.Duration) Option {
return func(o *Options) {
o.RegisterInterval = t
}
}
// Wait tells the server to wait for requests to finish before exiting
func Wait(b bool) Option {
return func(o *Options) {
if o.Context == nil {
o.Context = context.Background()
}
o.Context = context.WithValue(o.Context, "wait", b)
}
}