39 lines
799 B
Go
39 lines
799 B
Go
package nsqpublisher
|
|
|
|
import (
|
|
"github.com/bitly/go-nsq"
|
|
"github.com/didiercrunch/doormanserver/shared"
|
|
"gopkg.in/mgo.v2/bson"
|
|
)
|
|
|
|
type NsqPublisher struct {
|
|
Config *nsq.Config
|
|
Producer *nsq.Producer
|
|
}
|
|
|
|
func (pub *NsqPublisher) InitConfig() {
|
|
pub.Config = nsq.NewConfig()
|
|
}
|
|
|
|
func (pub *NsqPublisher) Init() error {
|
|
var err error
|
|
pub.InitConfig()
|
|
pub.Producer, err = nsq.NewProducer(shared.GetParams().NSQ.NSQLookupdUrl, pub.Config)
|
|
return err
|
|
|
|
}
|
|
|
|
func (pub *NsqPublisher) Stop() error {
|
|
pub.Producer.Stop()
|
|
return nil
|
|
}
|
|
|
|
func (pub *NsqPublisher) Emit(doormanId bson.ObjectId, doorman shared.AsDoormanUpdatePayloader) error {
|
|
topic := doormanId.Hex()
|
|
if data, err := doorman.AsDoormanUpdatePayload(); err != nil {
|
|
return err
|
|
} else {
|
|
return pub.Producer.Publish(topic, data)
|
|
}
|
|
}
|