Merge pull request #329 from micro/http
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 | package http | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"github.com/micro/go-micro/broker" | 	"github.com/micro/go-micro/broker" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | // NewBroker returns a new http broker | ||||||
| func NewBroker(opts ...broker.Option) broker.Broker { | func NewBroker(opts ...broker.Option) broker.Broker { | ||||||
| 	return broker.NewBroker(opts...) | 	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(), | 		mux:         http.NewServeMux(), | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	// specify the message handler | ||||||
| 	h.mux.Handle(DefaultSubPath, h) | 	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 | 	return h | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user