From 8324f872ef3a4d0c978a9b1d062800c6a1701c12 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 01 十二月 2023 09:58:17 +0800
Subject: [PATCH] fix

---
 nsq/nsq.go |   64 +++++++++++++++++++++-----------
 1 files changed, 42 insertions(+), 22 deletions(-)

diff --git a/nsq/nsq.go b/nsq/nsq.go
index 064efa7..c447e8b 100644
--- a/nsq/nsq.go
+++ b/nsq/nsq.go
@@ -3,20 +3,21 @@
 import (
 	"apsClient/conf"
 	"apsClient/constvar"
-	"apsClient/model/common"
 	"apsClient/pkg/logx"
+	"apsClient/pkg/nsqclient"
 	"apsClient/pkg/safe"
-	"basic.com/aps/nsqclient.git"
 	"context"
 	"errors"
 	"fmt"
+	"github.com/shirou/gopsutil/net"
 	"sync"
-	"time"
+	"sync/atomic"
 )
 
 type consumerManager struct {
-	ctx     context.Context
-	clients sync.Map
+	ctx      context.Context
+	clients  sync.Map
+	initFlag int32
 }
 
 var defaultConsumerManager *consumerManager
@@ -29,24 +30,17 @@
 	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
 	}
-	safe.Go(func() {
-		caller := NewCaller(fmt.Sprintf(constvar.NsqTopicGetPlcAddress, conf.Conf.NsqConf.NodeId), fmt.Sprintf(constvar.NsqTopicSendPlcAddress, conf.Conf.NsqConf.NodeId))
-		var addressResult common.ResponsePlcAddress
-		err := caller.Call(common.RequestPlcAddress{DeviceId: conf.Conf.System.DeviceId}, &addressResult, time.Second*3)
-		if err != nil {
-			logx.Infof("get plc address err: %v", err.Error())
-		}
-	})
-
 	var topics = []string{
 		constvar.NsqTopicScheduleTask,
-		constvar.NsqTopicSendPlcAddress,
-		constvar.NsqTopicProcessParamsResponse,
 		constvar.NsqTopicApsProcessParams,
 		constvar.NsqTopicDeviceUpdate,
+		constvar.NsqTopicPullDataResponse,
 	}
 	for _, t := range topics {
 		topic := fmt.Sprintf(t, conf.Conf.NsqConf.NodeId)
@@ -56,12 +50,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)
@@ -74,23 +69,48 @@
 			}
 		}
 	})
-	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
 	})
+}
+
+func (c *consumerManager) ping() bool {
+	connections, err := net.Connections("inet")
+	if err != nil {
+		fmt.Println("Error:", err)
+		return false
+	}
+	for _, conn := range connections {
+		ipPort := fmt.Sprintf("%s:%d", conn.Raddr.IP, conn.Raddr.Port)
+		fmt.Println("net.Connections ipPort", ipPort)
+		if ipPort == conf.Conf.NsqConf.NsqdAddr && conn.Status == "ESTABLISHED" {
+			return true
+		}
+	}
+	return false
 }
 
 func Init() error {
 	return defaultConsumerManager.init()
 }
 
+func Ping() bool {
+	return defaultConsumerManager.ping()
+}
+
 func Stop() {
 	defaultConsumerManager.stop()
+	StopProducer()
 }

--
Gitblit v1.8.0