• 简介
  • 编译
    • 自带编译脚本
    • 交叉编译
  • 服务启动
    • 启动参数
  • 服务关闭
  • 服务重启
  • 信号量处理

    简介

    Go语言是一门编译型语言,Go包自带编译器功能(支持交叉编译),编译成可执行二进度文件。

    编译

    框架自带了一个建议的编译脚本,执行后生成可执行二进制文件,文件默认路径 build/bin/snow

    自带编译脚本

    1. sh build/shell/build.sh

    交叉编译

    交叉编译,顾名思义,就是在某个系统编译出在另外一个系统架构的可执行二进制文件。

    1. GOOS={$os} GOARCH={$arch} go build -o {$target} main.go

    服务启动

    1. build/bin/snow -a api #启动Api服务
    2. build/bin/snow -a cron #启动Cron任务调度服务
    3. build/bin/snow -a job #启动队列调度服务

    启动参数

    1. -a 启动的应用类型,api表示HTTP服务,job表示队列服务,cron表示Crontab任务调取服务,不传使用默认值api
    2. -v 启动版本号
    3. -c 配置文件路径,默认读取当前执行用户所在目录下的.env
    4. -p 启动服务的进程号存放目录,注意是目录,如-a传的是api,则进程号的路径是:目录+api.pid
    5. -queue 当-ajob时有用,表示启用消费的topic,多个使用逗号分隔,主要是为了将队列拆分多机部署。

    服务关闭

    给进程号发送SIGTERM信号,服务进行平滑关闭。

    备注:在启动服务时,会将进程号写入文件,执行关闭命令会通过文件路径找到进程号。

    1. build/bin/snow -c stop #通过-a参数指定关闭的模式类型 http/队列/任务调度

    服务重启

    给进程号发送SIGHUP信号,目前只有HTTP服务才有实现了平滑重启。

    1. build/bin/snow -c restart

    信号量处理

    HTTP服务监听处理的信号量:

    • SIGTERM:等待请求中的连接结束后,平滑关闭
    • SIGINT:等待请求中的连接结束后,平滑关闭
    • SIGHUP:平滑重启
      • fork子进程(使用相同的启动命令),将服务监听的socket文件描述符传递给子进程
      • 子进程监听父进程的socket,这个时候父进程和子进程都可以接收请求
      • 子进程启动成功之后,父进程停止接收新的连接,等待旧连接处理完成(或超时)
      • 父进程退出,重启完成
    • SIGUSR2:will trigger hammerTime 快捷链接

    队列调度服务监听处理的信号量:

    • SIGTERM:将服务设为关闭状态,等待旧任务结束后再退出(或超时)
    • SIGINT:将服务设为关闭状态,等待旧任务结束后再退出(或超时)
    • 配合supervisor使用,重启时默认发送SIGTERM信号量关闭进程,在重新启动新进程。

    任务调度服务监听处理的信号量:

    • SIGTERM:将服务设为关闭状态,再等待若干秒再退出
    • SIGINT:将服务设为关闭状态,再等待若干秒再退出
    • 配合supervisor使用,重启时默认发送SIGTERM信号量关闭进程,在重新启动新进程。