func main() { flag.Parse() conn, ch := qutils.GetChannel(url) defer conn.Close() defer ch.Close() dataQueue := qutils.GetQueue(*name, ch, false) publishQueueName(ch) discoveryQueue := qutils.GetQueue("", ch, true) ch.QueueBind( discoveryQueue.Name, "", qutils.SensorDiscoveryExchange, false, nil) go listenForDiscoveryRequests(discoveryQueue.Name, ch) dur, _ := time.ParseDuration(strconv.Itoa(1000/int(*freq)) + "ms") signal := time.Tick(dur) buf := new(bytes.Buffer) enc := gob.NewEncoder(buf) for range signal { calcValue() reading := dto.SensorMessage{ Name: *name, Value: value, Timestamp: time.Now(), } buf.Reset() enc = gob.NewEncoder(buf) enc.Encode(reading) msg := amqp.Publishing{ Body: buf.Bytes(), } ch.Publish( "", // exchange name dataQueue.Name, // key string false, // mandatory bool false, // immediate bool msg) // msg amqp.Publish log.Printf("Reading sent. Value: %v\n", value) } }
func NewDatabaseConsumer(er EventRaiser) *DatabaseConsumer { dc := DatabaseConsumer{ er: er, } dc.conn, dc.ch = qutils.GetChannel(url) dc.queue = qutils.GetQueue(qutils.PersistReadingsQueue, dc.ch, false) dc.er.AddListener("DataSourceDiscovered", func(eventData interface{}) { dc.SubscribeToDataEvent(eventData.(string)) }) return &dc }
func (ql *QueueListener) ListenForNewSource() { q := qutils.GetQueue("", ql.ch, true) ql.ch.QueueBind( q.Name, // name string "", // key string "amq.fanout", // exchange string false, //noWait bool nil) // args amqp.Table msgs, _ := ql.ch.Consume( q.Name, "", true, false, false, false, nil) ql.DiscoverSensors() fmt.Println("listening for new sources") for msg := range msgs { fmt.Println("new source discovered") ql.ea.PublishEvent("DataSourceDiscovered", string(msg.Body)) sourceChan, _ := ql.ch.Consume( string(msg.Body), "", true, false, false, false, nil) if ql.sources[string(msg.Body)] == nil { ql.sources[string(msg.Body)] = sourceChan go ql.AddListener(sourceChan) } } }