xxl-job / xxl-job-executor-go

xxl-job 执行器(golang 客户端)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

注册执行器不需要轮询调用,HTTP1.1默认支持keepalive

s5364733 opened this issue · comments

  • 原代码运行抓包

40ddf125757817761095bd53d57ac2a


>从上面可以看出本地端口都使用不同链接,通过ACK确认TCP报文可以看出(58421,58425,58441)
  • 去掉本地注册轮询之后抓包

6aeb8ef0af362744ded6bea7dc70ec4

很明显进行第一次尝试keepalive TCPack 之后 服务端会主动发送FIN SYN 包主动断开连接,

总结,虽然不确定为什么服务端会主动发送FIN 包 但是可以确定的是,轮询防止心跳过期代码并没有起到什么作用

代码如下:

func (e *executor) registry() {

	t := time.NewTimer(time.Second * 0) //初始立即执行
	defer t.Stop()
	req := &Registry{
		RegistryGroup: "EXECUTOR",
		RegistryKey:   e.opts.RegistryKey,
		RegistryValue: "http://" + e.address,
	}
	param, err := json.Marshal(req)
	if err != nil {
		log.Fatal("执行器注册信息解析失败:" + err.Error())
	}
	for {
		<-t.C
		t.Reset(time.Second * time.Duration(20)) //20秒心跳防止过期
		func() {
			result, err := e.post("/api/registry", string(param))
			if err != nil {
				e.log.Error("执行器注册失败1:" + err.Error())
				return
			}
			defer result.Body.Close()
			body, err := ioutil.ReadAll(result.Body)
			if err != nil {
				e.log.Error("执行器注册失败2:" + err.Error())
				return
			}
			res := &res{}
			_ = json.Unmarshal(body, &res)
			if res.Code != SuccessCode {
				e.log.Error("执行器注册失败3:" + string(body))
				return
			}
			e.log.Info("执行器注册成功:" + string(body))
		}()

	}
}

这个会处理吗?控制台一直打执行器注册成功的日志