ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

自动重连套路

2021-07-18 20:32:13  阅读:167  来源: 互联网

标签:return Producer err 套路 isHealthy 自动 func time 重连


自动重连套路

思路

  1. 结构体:

    静态配置

    动态链接

    链接关闭字段

    数据管道

  2. initConfig()

  3. run()

    重试机制

  4. Watch()

代码

package main

import (
	"log"
	"net"
	"strconv"
	"time"
)

const (
	MaxSend = 1000
)

type Producer struct {
	ConfAddr string
	Conn net.Conn // 像这种链接的动态属性就要去监控
	isHealthy bool
	Msg chan string
}

func NewProducer(addr string) *Producer {
	return &Producer{
		ConfAddr: addr,
		isHealthy:  false,
		Msg: make(chan string, MaxSend),
	}
}

func (p *Producer)initConfig() error {
	log.Println("初始化配置")
	dial, err := net.Dial("tcp", p.ConfAddr)
	if err != nil {
		p.isHealthy = false
		log.Println(err)
		return err
	}
	
	p.Conn = dial
	p.isHealthy = true

	return nil
}

func (p *Producer) run()  {
	retry := 0

	for p.isHealthy {
		data := <- p.Msg
		log.Println("收到数据", data)
		p.Conn, _ = net.Dial("tcp", p.ConfAddr)

		_, err := p.Conn.Write([]byte(data))
		if err != nil {
			log.Println(err)
			retry++
			if retry > 10 {
				p.isHealthy = false
				return
			}
			continue
		}

		retry = 0
	}
}

func (p *Producer)Watch()  {
	for {
		if p.isHealthy {
			time.Sleep(time.Second)
			continue
		}

		err := p.initConfig()
		if err != nil {
			log.Println("配置初始化失败")
			continue
		}
		p.run()
	}
}

func main() {
	producer := NewProducer("127.0.0.1:9666")

	go func() {
		ticker := time.NewTicker(time.Second)
		for {
			<-ticker.C
			producer.Msg <- strconv.Itoa(time.Now().Second())
		}
	}()

	producer.Watch()
}

标签:return,Producer,err,套路,isHealthy,自动,func,time,重连
来源: https://www.cnblogs.com/maomaomaoge/p/15027614.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有