简介
Go语言是一门编译型语言,Go包自带编译器功能(支持交叉编译),编译成可执行二进度文件。
编译
框架自带了一个建议的编译脚本,执行后生成可执行二进制文件,文件默认路径 build/bin/snow
自带编译脚本
sh build/shell/build.sh
交叉编译
交叉编译,顾名思义,就是在某个系统编译出在另外一个系统架构的可执行二进制文件。
GOOS={$os} GOARCH={$arch} go build -o {$target} main.go
服务启动
build/bin/snow -a api #启动Api服务
build/bin/snow -a cron #启动Cron任务调度服务
build/bin/snow -a job #启动队列调度服务
启动参数
-a 启动的应用类型,api表示HTTP服务,job表示队列服务,cron表示Crontab任务调取服务,不传使用默认值api
-v 启动版本号
-c 配置文件路径,默认读取当前执行用户所在目录下的.env
-p 启动服务的进程号存放目录,注意是目录,如-a传的是api,则进程号的路径是:目录+api.pid
-queue 当-a为job时有用,表示启用消费的topic,多个使用逗号分隔,主要是为了将队列拆分多机部署。
服务关闭
给进程号发送SIGTERM信号,服务进行平滑关闭。
备注:在启动服务时,会将进程号写入文件,执行关闭命令会通过文件路径找到进程号。
build/bin/snow -c stop #通过-a参数指定关闭的模式类型 http/队列/任务调度
服务重启
给进程号发送SIGHUP信号,目前只有HTTP服务才有实现了平滑重启。
build/bin/snow -c restart
信号量处理
HTTP服务监听处理的信号量:
- SIGTERM:等待请求中的连接结束后,平滑关闭
- SIGINT:等待请求中的连接结束后,平滑关闭
- SIGHUP:平滑重启
- fork子进程(使用相同的启动命令),将服务监听的socket文件描述符传递给子进程
- 子进程监听父进程的socket,这个时候父进程和子进程都可以接收请求
- 子进程启动成功之后,父进程停止接收新的连接,等待旧连接处理完成(或超时)
- 父进程退出,重启完成
- SIGUSR2:will trigger hammerTime 快捷链接
队列调度服务监听处理的信号量:
- SIGTERM:将服务设为关闭状态,等待旧任务结束后再退出(或超时)
- SIGINT:将服务设为关闭状态,等待旧任务结束后再退出(或超时)
- 配合supervisor使用,重启时默认发送SIGTERM信号量关闭进程,在重新启动新进程。
任务调度服务监听处理的信号量:
- SIGTERM:将服务设为关闭状态,再等待若干秒再退出
- SIGINT:将服务设为关闭状态,再等待若干秒再退出
- 配合supervisor使用,重启时默认发送SIGTERM信号量关闭进程,在重新启动新进程。