package service import ( "github.com/fox/fox/etcd" "github.com/fox/fox/log" "testing" "time" ) const ( GameSrv = "game" NatsAddress = "nats://192.168.232.128:4222" EtcdAddress = "192.168.232.128:2379" EtcdAddress2 = "114.132.124.145:2379" NatsAddress2 = "nats://114.132.124.145:4222" ) func newGameService() *gameService { _ = NatsAddress2 _ = NatsAddress _ = EtcdAddress2 _ = EtcdAddress var err error s := new(gameService) if s.NatsService, err = NewNatsService(GameSrv, "1", s, NatsAddress2); err != nil { log.Fatal(err.Error()) return nil } if s.etcdService, err = etcd.NewRegistry[etcd.ServiceNode]([]string{EtcdAddress2}, etcd.ServiceNode{}.EtcdRootKey(), "", ""); err != nil { log.Error(err.Error()) s.NatsService.OnStop() return nil } endpoint := &etcd.ServiceNode{ Name: s.Name(), Type: s.Type(), Address: "", Port: 0, Version: "", ServiceType: etcd.Unique, } if err = s.etcdService.Register(endpoint); err != nil { log.Error(err.Error()) s.NatsService.OnStop() return nil } s.OnInit() return s } type gameService struct { *NatsService etcdService *etcd.Registry[etcd.ServiceNode] etcdTopic *etcd.Registry[etcd.TopicNode] srvTopic string } func (s *gameService) OnInit() { s.etcdService.WatchServices() s.etcdTopic.WatchServices() if err := s.NatsService.Subscribe(Topic(s)); err != nil { log.Error(err.Error()) } if err := s.NatsService.QueueSubscribe(GroupTopic(s), GroupQueue(s)); err != nil { log.Error(err.Error()) } log.Debug("onInit") } func (s *gameService) OnStop() { s.etcdService.UnregisterService() s.etcdService.UnregisterService() s.NatsService.OnStop() log.Debug("OnStop") } func (s *gameService) OnMessage(msg []byte) error { log.Debug(s.Log("on message:%v", string(msg))) return nil } func TestGameService(t *testing.T) { log.Open("test.log", log.DebugL) s := newGameService() msg := "hello world" if err := s.Send(Topic(s), []byte(msg)); err != nil { log.Error(err.Error()) } for _, srv := range s.etcdService.GetNodes() { log.Debug(s.Log("发现有服务:%v", srv)) } time.Sleep(1 * time.Second) s.NotifyStop() s.WaitStop() log.Debug("exit") }