From 53d80c839ad2aad0a0482ca43fca1fc3a95b9d1c Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期五, 03 十一月 2023 17:30:54 +0800 Subject: [PATCH] 更改路由 --- nsq/nsq.go | 53 +++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 41 insertions(+), 12 deletions(-) diff --git a/nsq/nsq.go b/nsq/nsq.go index 4fb71b6..c447e8b 100644 --- a/nsq/nsq.go +++ b/nsq/nsq.go @@ -4,17 +4,20 @@ "apsClient/conf" "apsClient/constvar" "apsClient/pkg/logx" + "apsClient/pkg/nsqclient" "apsClient/pkg/safe" - "basic.com/aps/nsqclient.git" "context" "errors" "fmt" + "github.com/shirou/gopsutil/net" "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 +30,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 +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) @@ -65,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