diff --git a/options.go b/options.go index ac077048..8efa3134 100644 --- a/options.go +++ b/options.go @@ -22,8 +22,7 @@ type Options struct { Registry registry.Registry Transport transport.Transport - // Registration options - RegisterTTL time.Duration + // Register loop interval RegisterInterval time.Duration // Before and After funcs @@ -125,7 +124,7 @@ func Action(a func(*cli.Context)) Option { func RegisterTTL(t time.Duration) Option { return func(o *Options) { - o.RegisterTTL = t + o.Server.Init(server.RegisterTTL(t)) } } diff --git a/registry/options.go b/registry/options.go index 27a8ced9..04e3525b 100644 --- a/registry/options.go +++ b/registry/options.go @@ -44,7 +44,7 @@ func TLSConfig(t *tls.Config) Option { } } -func WithTTL(t time.Duration) RegisterOption { +func RegisterTTL(t time.Duration) RegisterOption { return func(o *RegisterOptions) { o.TTL = t } diff --git a/server/options.go b/server/options.go index 80f75c63..edaeceea 100644 --- a/server/options.go +++ b/server/options.go @@ -26,6 +26,8 @@ type Options struct { HdlrWrappers []HandlerWrapper SubWrappers []SubscriberWrapper + RegisterTTL time.Duration + // Debug Handler which can be set by a user DebugHandler debug.DebugHandler @@ -34,10 +36,6 @@ type Options struct { Context context.Context } -type RegisterOptions struct { - TTL time.Duration -} - func newOptions(opt ...Option) Options { opts := Options{ Codecs: make(map[string]codec.NewCodec), @@ -160,6 +158,13 @@ func Metadata(md map[string]string) Option { } } +// Register the service with a TTL +func RegisterTTL(t time.Duration) Option { + return func(o *Options) { + o.RegisterTTL = t + } +} + // Adds a handler Wrapper to a list of options passed into the server func WrapHandler(w HandlerWrapper) Option { return func(o *Options) { @@ -173,10 +178,3 @@ func WrapSubscriber(w SubscriberWrapper) Option { o.SubWrappers = append(o.SubWrappers, w) } } - -// Register the service with a TTL -func RegisterTTL(t time.Duration) RegisterOption { - return func(o *RegisterOptions) { - o.TTL = t - } -} diff --git a/server/rpc_server.go b/server/rpc_server.go index 8e58f156..97f1f921 100644 --- a/server/rpc_server.go +++ b/server/rpc_server.go @@ -155,15 +155,7 @@ func (s *rpcServer) Subscribe(sb Subscriber) error { return nil } -func (s *rpcServer) Register(opts ...RegisterOption) error { - var options RegisterOptions - for _, o := range opts { - o(&options) - } - - // create registry options - rOpts := []registry.RegisterOption{registry.WithTTL(options.TTL)} - +func (s *rpcServer) Register() error { // parse address for host, port config := s.Options() var advt, host string @@ -228,6 +220,9 @@ func (s *rpcServer) Register(opts ...RegisterOption) error { } log.Infof("Registering node: %s", node.Id) + // create registry options + rOpts := []registry.RegisterOption{registry.RegisterTTL(config.RegisterTTL)} + if err := config.Registry.Register(service, rOpts...); err != nil { return err } diff --git a/server/server.go b/server/server.go index 5afcf7e5..c74e392b 100644 --- a/server/server.go +++ b/server/server.go @@ -45,7 +45,7 @@ type Server interface { NewHandler(interface{}, ...HandlerOption) Handler NewSubscriber(string, interface{}, ...SubscriberOption) Subscriber Subscribe(Subscriber) error - Register(...RegisterOption) error + Register() error Deregister() error Start() error Stop() error @@ -86,8 +86,6 @@ type HandlerOption func(*HandlerOptions) type SubscriberOption func(*SubscriberOptions) -type RegisterOption func(*RegisterOptions) - var ( DefaultAddress = ":0" DefaultName = "go-server" diff --git a/service.go b/service.go index a05c1e09..f50fb254 100644 --- a/service.go +++ b/service.go @@ -41,8 +41,7 @@ func (s *service) run(exit chan bool) { for { select { case <-t.C: - if err := s.opts.Server.Register(server.RegisterTTL(s.opts.RegisterTTL)); err != nil { - } + s.opts.Server.Register() case <-exit: t.Stop() return @@ -102,7 +101,7 @@ func (s *service) Start() error { return err } - if err := s.opts.Server.Register(server.RegisterTTL(s.opts.RegisterTTL)); err != nil { + if err := s.opts.Server.Register(); err != nil { return err }