NSQ-Middleware is middleware for your NSQ consumer handler function. It's heavily inspired by negroni.
- Recovery
- Logger
- Prometheus
We can create new middleware object that implement nsq.Handler interface and use it in NSQ-Middleware object using Use method.
We also can use nsq.HandlerFunc that we already created before.
// Create NSQ-Middleware object.
nsqMid := nsqmiddleware.New()
// Optional: Use three bundled middleware.
nsqMid.Use(nsqm.NewRecovery())
nsqMid.Use(nsqm.NewLogger())
nsqMid.Use(nsqm.NewPrometheus())
// Create middleware object that implement nsq.Handler interface.
type Middleware1 struct{}
func (m1 Middleware1) HandleMessage(message *nsq.Message, next nsq.HandlerFunc) error {
log.Printf("Middleware 1:\t%s\n", message.Body)
return next(message)
}
// Use Middleware1.
nsqMid.Use(Middleware1{})
// We may already have nsq.HandlerFunc.
func handlerFunc1(message *nsq.Message) error {
log.Printf("Handler Func 1:\t%s\n\n", message.Body)
message.Finish()
return nil
}
// Let's use it too.
nsqMid.UseHandlerFunc(handlerFunc1)
consumer, _ := nsq.NewConsumer(topicName, channelName, nsq.NewConfig())
consumer.AddHandler(nsqMid)
consumer.ConnectToNSQD(nsqdAddress)
Check example package for more usage examples.