Skip to content

Commit

Permalink
allow configuring register action for nats
Browse files Browse the repository at this point in the history
Signed-off-by: jkoberg <[email protected]>
  • Loading branch information
kobergj committed Jul 20, 2023
1 parent ea37907 commit abb2a21
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 8 deletions.
24 changes: 16 additions & 8 deletions v4/registry/nats/nats.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ import (
)

type natsRegistry struct {
addrs []string
opts registry.Options
nopts nats.Options
queryTopic string
watchTopic string
addrs []string
opts registry.Options
nopts nats.Options
queryTopic string
watchTopic string
registerAction string

sync.RWMutex
conn *nats.Conn
Expand All @@ -27,8 +28,9 @@ type natsRegistry struct {
}

var (
defaultQueryTopic = "micro.registry.nats.query"
defaultWatchTopic = "micro.registry.nats.watch"
defaultQueryTopic = "micro.registry.nats.query"
defaultWatchTopic = "micro.registry.nats.watch"
defaultRegisterAction = "create"
)

func init() {
Expand All @@ -55,6 +57,11 @@ func configure(n *natsRegistry, opts ...registry.Option) error {
watchTopic = wt
}

registerAction := defaultRegisterAction
if ra, ok := n.opts.Context.Value(registerActionKey{}).(string); ok {
registerAction = ra
}

// registry.Options have higher priority than nats.Options
// only if Addrs, Secure or TLSConfig were not set through a registry.Option
// we read them from nats.Option
Expand All @@ -78,6 +85,7 @@ func configure(n *natsRegistry, opts ...registry.Option) error {
n.nopts = natsOptions
n.queryTopic = queryTopic
n.watchTopic = watchTopic
n.registerAction = registerAction

return nil
}
Expand Down Expand Up @@ -322,7 +330,7 @@ func (n *natsRegistry) Register(s *registry.Service, opts ...registry.RegisterOp
return err
}

b, err := json.Marshal(&registry.Result{Action: "create", Service: s})
b, err := json.Marshal(&registry.Result{Action: n.registerAction, Service: s})
if err != nil {
return err
}
Expand Down
15 changes: 15 additions & 0 deletions v4/registry/nats/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ type contextQuorumKey struct{}
type optionsKey struct{}
type watchTopicKey struct{}
type queryTopicKey struct{}
type registerActionKey struct{}

var (
DefaultQuorum = 0
Expand Down Expand Up @@ -70,3 +71,17 @@ func WatchTopic(s string) registry.Option {
o.Context = context.WithValue(o.Context, watchTopicKey{}, s)
}
}

// RegisterAction allows to set the action to use when registering to nats.
// As of now there are three different options:
// - "create" (default) only registers if there is noone already registered under the same key.
// - "update" only updates the registration if it already exists.
// - "put" creates or updates a registration
func RegisterAction(s string) registry.Option {
return func(o *registry.Options) {
if o.Context == nil {
o.Context = context.Background()
}
o.Context = context.WithValue(o.Context, registerActionKey{}, s)
}
}

0 comments on commit abb2a21

Please sign in to comment.