mirror of
				https://github.com/go-micro/go-micro.git
				synced 2025-10-30 23:27:41 +02:00 
			
		
		
		
	Add runtime to service.Options()
This commit is contained in:
		| @@ -3,7 +3,6 @@ package vpath | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"net/http" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| @@ -28,8 +27,6 @@ func (r *Resolver) Resolve(req *http.Request) (*resolver.Endpoint, error) { | ||||
| 		return nil, errors.New("unknown name") | ||||
| 	} | ||||
|  | ||||
| 	fmt.Println(req.URL.Path) | ||||
|  | ||||
| 	parts := strings.Split(req.URL.Path[1:], "/") | ||||
| 	if len(parts) == 1 { | ||||
| 		return &resolver.Endpoint{ | ||||
|   | ||||
| @@ -100,6 +100,12 @@ func Registry(r *registry.Registry) Option { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func Runtime(r *runtime.Runtime) Option { | ||||
| 	return func(o *Options) { | ||||
| 		o.Runtime = r | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func Transport(t *transport.Transport) Option { | ||||
| 	return func(o *Options) { | ||||
| 		o.Transport = t | ||||
|   | ||||
							
								
								
									
										10
									
								
								options.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								options.go
									
									
									
									
									
								
							| @@ -14,6 +14,7 @@ import ( | ||||
| 	"github.com/micro/go-micro/v2/debug/profile" | ||||
| 	"github.com/micro/go-micro/v2/debug/trace" | ||||
| 	"github.com/micro/go-micro/v2/registry" | ||||
| 	"github.com/micro/go-micro/v2/runtime" | ||||
| 	"github.com/micro/go-micro/v2/server" | ||||
| 	"github.com/micro/go-micro/v2/store" | ||||
| 	"github.com/micro/go-micro/v2/transport" | ||||
| @@ -29,6 +30,7 @@ type Options struct { | ||||
| 	Server    server.Server | ||||
| 	Store     store.Store | ||||
| 	Registry  registry.Registry | ||||
| 	Runtime   runtime.Runtime | ||||
| 	Transport transport.Transport | ||||
| 	Profile   profile.Profile | ||||
|  | ||||
| @@ -55,6 +57,7 @@ func newOptions(opts ...Option) Options { | ||||
| 		Server:    server.DefaultServer, | ||||
| 		Store:     store.DefaultStore, | ||||
| 		Registry:  registry.DefaultRegistry, | ||||
| 		Runtime:   runtime.DefaultRuntime, | ||||
| 		Transport: transport.DefaultTransport, | ||||
| 		Context:   context.Background(), | ||||
| 		Signal:    true, | ||||
| @@ -182,6 +185,13 @@ func Transport(t transport.Transport) Option { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Runtime sets the runtime | ||||
| func Runtime(r runtime.Runtime) Option { | ||||
| 	return func(o *Options) { | ||||
| 		o.Runtime = r | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Convenience options | ||||
|  | ||||
| // Address sets the address of the server | ||||
|   | ||||
| @@ -3,6 +3,8 @@ package runtime | ||||
| import ( | ||||
| 	"context" | ||||
| 	"io" | ||||
|  | ||||
| 	"github.com/micro/go-micro/v2/client" | ||||
| ) | ||||
|  | ||||
| type Option func(o *Options) | ||||
| @@ -17,6 +19,8 @@ type Options struct { | ||||
| 	Source string | ||||
| 	// Base image to use | ||||
| 	Image string | ||||
| 	// Client to use when making requests | ||||
| 	Client client.Client | ||||
| } | ||||
|  | ||||
| // WithSource sets the base image / repository | ||||
| @@ -47,6 +51,13 @@ func WithImage(t string) Option { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // WithClient sets the client to use | ||||
| func WithClient(c client.Client) Option { | ||||
| 	return func(o *Options) { | ||||
| 		o.Client = c | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type CreateOption func(o *CreateOptions) | ||||
|  | ||||
| type ReadOption func(o *ReadOptions) | ||||
|   | ||||
| @@ -24,6 +24,9 @@ func (s *svc) Init(opts ...runtime.Option) error { | ||||
| 		o(&s.options) | ||||
| 	} | ||||
|  | ||||
| 	// reset the runtime as the client could have changed | ||||
| 	s.runtime = pb.NewRuntimeService(runtime.DefaultName, s.options.Client) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| @@ -278,19 +281,17 @@ func (s *svc) String() string { | ||||
|  | ||||
| // NewRuntime creates new service runtime and returns it | ||||
| func NewRuntime(opts ...runtime.Option) runtime.Runtime { | ||||
| 	// get default options | ||||
| 	options := runtime.Options{} | ||||
| 	var options runtime.Options | ||||
|  | ||||
| 	// apply requested options | ||||
| 	for _, o := range opts { | ||||
| 		o(&options) | ||||
| 	} | ||||
|  | ||||
| 	// create default client | ||||
| 	cli := client.DefaultClient | ||||
| 	if options.Client == nil { | ||||
| 		options.Client = client.DefaultClient | ||||
| 	} | ||||
|  | ||||
| 	return &svc{ | ||||
| 		options: options, | ||||
| 		runtime: pb.NewRuntimeService(runtime.DefaultName, cli), | ||||
| 		runtime: pb.NewRuntimeService(runtime.DefaultName, options.Client), | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										17
									
								
								service.go
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								service.go
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ package micro | ||||
| import ( | ||||
| 	"os" | ||||
| 	"os/signal" | ||||
| 	"runtime" | ||||
| 	rtime "runtime" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
|  | ||||
| @@ -15,6 +15,7 @@ import ( | ||||
| 	"github.com/micro/go-micro/v2/debug/trace" | ||||
| 	"github.com/micro/go-micro/v2/logger" | ||||
| 	"github.com/micro/go-micro/v2/plugin" | ||||
| 	"github.com/micro/go-micro/v2/runtime" | ||||
| 	"github.com/micro/go-micro/v2/server" | ||||
| 	"github.com/micro/go-micro/v2/store" | ||||
| 	signalutil "github.com/micro/go-micro/v2/util/signal" | ||||
| @@ -98,6 +99,7 @@ func (s *service) Init(opts ...Option) { | ||||
| 			cmd.Auth(&s.opts.Auth), | ||||
| 			cmd.Broker(&s.opts.Broker), | ||||
| 			cmd.Registry(&s.opts.Registry), | ||||
| 			cmd.Runtime(&s.opts.Runtime), | ||||
| 			cmd.Transport(&s.opts.Transport), | ||||
| 			cmd.Client(&s.opts.Client), | ||||
| 			cmd.Config(&s.opts.Config), | ||||
| @@ -112,13 +114,8 @@ func (s *service) Init(opts ...Option) { | ||||
| 		name := s.opts.Cmd.App().Name | ||||
| 		s.opts.Store.Init(store.Table(name)) | ||||
|  | ||||
| 		// TODO: replace Cmd.Init with config.Load | ||||
| 		// Right now we're just going to load a token | ||||
| 		// May need to re-read value on change | ||||
| 		// TODO: should be scoped to micro/auth/token | ||||
| 		// if tk, _ := config.Get("token"); len(tk) > 0 { | ||||
| 		// 	s.opts.Auth.Init(auth.ServiceToken(tk)) | ||||
| 		// } | ||||
| 		// Set the client for the micro clients | ||||
| 		s.opts.Runtime.Init(runtime.WithClient(s.Client())) | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| @@ -192,9 +189,9 @@ func (s *service) Run() error { | ||||
| 	// start the profiler | ||||
| 	if s.opts.Profile != nil { | ||||
| 		// to view mutex contention | ||||
| 		runtime.SetMutexProfileFraction(5) | ||||
| 		rtime.SetMutexProfileFraction(5) | ||||
| 		// to view blocking profile | ||||
| 		runtime.SetBlockProfileRate(1) | ||||
| 		rtime.SetBlockProfileRate(1) | ||||
|  | ||||
| 		if err := s.opts.Profile.Start(); err != nil { | ||||
| 			return err | ||||
|   | ||||
		Reference in New Issue
	
	Block a user