fix
zhangqian
2023-10-30 10c65da3d2af7056f48d9301e83f53f102f76e18
nsq/nsq.go
@@ -4,17 +4,19 @@
   "apsClient/conf"
   "apsClient/constvar"
   "apsClient/pkg/logx"
   "apsClient/pkg/nsqclient"
   "apsClient/pkg/safe"
   "basic.com/aps/nsqclient.git"
   "context"
   "errors"
   "fmt"
   "sync"
   "sync/atomic"
)
type consumerManager struct {
   ctx     context.Context
   clients sync.Map
   ctx      context.Context
   clients  sync.Map
   initFlag int32
}
var defaultConsumerManager *consumerManager
@@ -27,14 +29,14 @@
   if len(conf.Conf.NsqConf.NodeId) <= 0 {
      return errors.New("no NodeId")
   }
   if !atomic.CompareAndSwapInt32(&c.initFlag, 0, 1) {
      return nil
   }
   if err := initProducer(); err != nil {
      return err
   }
   var topics = []string{
      constvar.NsqTopicScheduleTask,
      constvar.NsqTopicSendPlcAddress,
      constvar.NsqTopicProcessParamsResponse,
      constvar.NsqTopicApsProcessParams,
      constvar.NsqTopicDeviceUpdate,
      constvar.NsqTopicPullDataResponse,
@@ -47,12 +49,13 @@
}
func (c *consumerManager) AddConsumer(topic string) {
   client, err := NewConsumer(topic, conf.Conf.System.DeviceId)
   if err != nil {
      logx.Errorf("start nsq consume err: %v", err)
   }
   c.clients.Store(topic, client)
   safe.Go(func() {
      client, err := NewConsumer(topic, conf.Conf.System.DeviceId)
      if err != nil {
         logx.Errorf("start nsq consume err: %v", err)
      }
      c.clients.Store(topic, client)
      logx.Infof("add consumer success, topic:%v", topic)
      if len(conf.Conf.NsqConf.NsqlookupdAddr) > 0 {
         if err = client.RunLookupd(conf.Conf.NsqConf.NsqlookupdAddr, 1); err != nil {
            logx.Errorf("RunLookupd err:%v", err)
@@ -65,14 +68,18 @@
         }
      }
   })
   logx.Infof("add consumer success, topic:%v", topic)
}
func (c *consumerManager) stop() {
   if !atomic.CompareAndSwapInt32(&c.initFlag, 1, 0) {
      return
   }
   c.clients.Range(func(key, value any) bool {
      if consumer, ok := value.(*nsqclient.NsqConsumer); ok {
         nsqclient.DestroyNsqConsumer(consumer)
         logx.Infof("try stop consumer, topic : %v", key)
         consumer = nil
         c.clients.Delete(key)
      }
      return true
   })
@@ -84,4 +91,5 @@
func Stop() {
   defaultConsumerManager.stop()
   StopProducer()
}