func NewStartStopListener(messageBus yagnats.NATSConn, conf *config.Config) *StartStopListener { listener := &StartStopListener{ messageBus: messageBus, } messageBus.Subscribe(conf.SenderNatsStartSubject, func(message *nats.Msg) { startMessage, err := models.NewStartMessageFromJSON([]byte(message.Data)) if err != nil { panic(err) } listener.mutex.Lock() listener.starts = append(listener.starts, startMessage) listener.mutex.Unlock() }) messageBus.Subscribe(conf.SenderNatsStopSubject, func(message *nats.Msg) { stopMessage, err := models.NewStopMessageFromJSON([]byte(message.Data)) if err != nil { panic(err) } listener.mutex.Lock() listener.stops = append(listener.stops, stopMessage) listener.mutex.Unlock() }) return listener }
func (c *VcapComponent) Register(mbusClient yagnats.NATSConn) error { mbusClient.Subscribe("vcap.component.discover", func(msg *nats.Msg) { if msg.Reply == "" { log.Warnf("Received message with empty reply on subject %s", msg.Subject) return } c.Uptime = c.StartTime.Elapsed() b, e := json.Marshal(c) if e != nil { log.Warnf(e.Error()) return } mbusClient.Publish(msg.Reply, b) }) b, e := json.Marshal(c) if e != nil { log.Error(e.Error()) return e } mbusClient.Publish("vcap.component.announce", b) log.Infof("Component %s registered successfully", c.Type) return nil }
func StartFakeRouter() { var startMessage = func() []byte { d := RouterStart{ MinimumRegisterIntervalInSeconds: 20, } value, _ := json.Marshal(d) return value } natsMembers := make([]string, 1) uri := url.URL{ Scheme: "nats", User: url.UserPassword("", ""), Host: "127.0.0.1:4222", } natsMembers = append(natsMembers, uri.String()) var natsClient yagnats.NATSConn var err error for i := 0; i < 10; i++ { natsClient, err = yagnats.Connect(natsMembers) if err == nil { break } time.Sleep(time.Second) } Expect(err).ToNot(HaveOccurred()) natsClient.Subscribe("router.register", func(msg *nats.Msg) { }) natsClient.Subscribe("router.greet", func(msg *nats.Msg) { natsClient.Publish(msg.Reply, startMessage()) }) natsClient.Publish("router.start", startMessage()) }
if natsRunner != nil { natsRunner.Stop() } if router != nil { router.Stop() } }) Context("NATS", func() { Context("Router Greetings", func() { It("RouterGreets", func() { response := make(chan []byte) mbusClient.Subscribe("router.greet.test.response", func(msg *nats.Msg) { response <- msg.Data }) mbusClient.PublishRequest("router.greet", "router.greet.test.response", []byte{}) var msg []byte Eventually(response).Should(Receive(&msg)) var message vcap.RouterStart err := json.Unmarshal(msg, &message) Expect(err).NotTo(HaveOccurred()) Expect(message.MinimumRegisterIntervalInSeconds).To(Equal(5)) Expect(message.PruneThresholdInSeconds).To(Equal(120)) })
component.Varz.Type = "TestType" component.Logger = logger err := component.Start() Expect(err).ToNot(HaveOccurred()) err = component.Register(mbusClient) Expect(err).ToNot(HaveOccurred()) _, err = mbusClient.Subscribe("subject", func(msg *nats.Msg) { defer GinkgoRecover() data := make(map[string]interface{}) err := json.Unmarshal(msg.Data, &data) Expect(err).ToNot(HaveOccurred()) for _, key := range members { _, ok := data[key] Expect(ok).To(BeTrue()) } close(done) }) Expect(err).ToNot(HaveOccurred()) err = mbusClient.PublishRequest("vcap.component.discover", "subject", []byte("")) Expect(err).ToNot(HaveOccurred()) Eventually(done).Should(BeClosed()) }) It("publishes to vcap.component.announce on start-up", func() {