add http handler option for broker
This commit is contained in:
		| @@ -1,9 +1,11 @@ | ||||
| // Package http provides a http based message broker | ||||
| package http | ||||
|  | ||||
| import ( | ||||
| 	"github.com/micro/go-micro/broker" | ||||
| ) | ||||
|  | ||||
| // NewBroker returns a new http broker | ||||
| func NewBroker(opts ...broker.Option) broker.Broker { | ||||
| 	return broker.NewBroker(opts...) | ||||
| } | ||||
|   | ||||
							
								
								
									
										23
									
								
								broker/http/options.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								broker/http/options.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| package http | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"net/http" | ||||
|  | ||||
| 	"github.com/micro/go-micro/broker" | ||||
| ) | ||||
|  | ||||
| // Handle registers the handler for the given pattern. | ||||
| func Handle(pattern string, handler http.Handler) broker.Option { | ||||
| 	return func(o *broker.Options) { | ||||
| 		if o.Context == nil { | ||||
| 			o.Context = context.Background() | ||||
| 		} | ||||
| 		handlers, ok := o.Context.Value("http_handlers").(map[string]http.Handler) | ||||
| 		if !ok { | ||||
| 			handlers = make(map[string]http.Handler) | ||||
| 		} | ||||
| 		handlers[pattern] = handler | ||||
| 		o.Context = context.WithValue(o.Context, "http_handlers", handlers) | ||||
| 	} | ||||
| } | ||||
| @@ -126,7 +126,19 @@ func newHttpBroker(opts ...Option) Broker { | ||||
| 		mux:         http.NewServeMux(), | ||||
| 	} | ||||
|  | ||||
| 	// specify the message handler | ||||
| 	h.mux.Handle(DefaultSubPath, h) | ||||
|  | ||||
| 	// get optional handlers | ||||
| 	if h.opts.Context != nil { | ||||
| 		handlers, ok := h.opts.Context.Value("http_handlers").(map[string]http.Handler) | ||||
| 		if ok { | ||||
| 			for pattern, handler := range handlers { | ||||
| 				h.mux.Handle(pattern, handler) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return h | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user