申博在线娱乐登入

为开源项目 go-gin-api 增加后台任务模块

本文来源:http://www.yu833.com/www_chinanews_com/

申博在线娱乐登入,处罚书显示,做出上述处罚决定的日期为2016年11月1日。应对:携手构建新竞争优势对于中国通信和IT设备产业而言,既拥有快速提升的良好机遇,又面临很大挑战。第三条、手机之家网站在有理由确认有任何明显违反国家法律法规、侵犯任何第三人版权的作品存在时,有权不事先通知删除侵权作品。  面对这看似纷乱的格局,安邦智库(ANBOUND)研究团队照例进行了跟踪研究。

Android设备的安全问题逐渐被厂商和用户所重视。与其他机型PK:请选择品牌221克3360手机A奥克斯A宏碁A昂达A爱可视A爱唯克思A爱国者A爱家A爱立信A阿尔卡特A首派BBFBB北斗B博沃B巴诺书店B本易B波导B百加B邦华CColorflyC创维C卡西欧C西铂C长虹DDigiTalkDDmoboDdeovoD东信D东芝D大可乐D大唐D大显D大神D戴尔D朵唯D电意D迪士尼D迪比特EEMIEEE人E本FIfiveF富士通F斐讯F泛泰F飞利浦GGEMRYGGigasetGGoogle谷歌G格莱特HHIKeHHKCHHTCHHelperHiHKCH华世基H华为H华录H华硕H华禹H和信H恒基伟业H惠普H海信H海尔H黑莓Ii-mateIinnosIiuniJ京瓷J佳域J佳通J技嘉J经纬J金立J金鹏K康佳K科健K酷比K酷比魔方K酷派LLASSIELLGL乐丰L乐华L乐派L乐视TVL联想L蓝魔L里奥L雷蛇MMOMAXMMagicPadM微软M摩托罗拉M明基M明泰M美图M铭仁M魅影MOPSM魅族NNECNNUBENNubiaNnekenNnibiruN南方高科N纽曼N诺基亚OO2OOBEEOOKWAPOOPPOO奥盛O欧恩O欧新O欧达PPPTVPPalmP苹果Q七喜Q琦基Q青橙Q青葱RRunboR锐合SSKSSUGARSSonimS三星S三洋S三菱S宇达电通S尚合S松下S桑达S神舟S索尼S索尼爱立信S萨米S西门子S锤子S首信T8848钛金手机TTCLTThLTTransPhone传颂T台电T天时达T天珑T天语T天迈T托普T泰克飞石UUKINGUUT斯达康VVEBVVINUSVVertuVvivoV唯开W万利达W为美W吾尚W唯科W闻尚X先锋X厦华X夏新X夏普X小米X小蜜蜂X小辣椒X新邮通X熊猫X现代X西湖数源X西铂Y一加Y云台Y云狐Y亚马逊Y亿通Y优思Y优派Y原点Y影驰ZZOPOZZORA卓拉ZZTTZZUKZ中兴Z中国移动Z中天Z中恒Z中桥Z中电通信请选择产品但从中长期看,成本收入比会出现一定程度的上升:利率市场化向纵深推进,市场上对职业化管理人才和专业化业务人才的争夺日益激烈,激励机制将更趋市场化;同时,监管要求趋严,将迫使银行增加战略性费用和合规方面的投入。对于香蕉的市场前景,他表示比较乐观,预计年底价钱有所上涨。

软件频道主管岗位职责1、负责手机软件频道的策划和日常维护;2、撰写手机软件评测、策划和配合相关活动;3、相关论坛的维护;任职资格1、对手机和智能系统有浓厚的兴趣,全面了解PC、手机终端和操作系统的使用;2、至少熟悉两种以上的智能手机操作系统;3、资深手机玩家、有手机软件开发经验者优先;4、文字功底扎实,表达能力强;熟悉各种办公软件;5、责任心强,能承受较大工作压力,适应加班,具备良好的团队合作精神和沟通技巧。“最近两年的发展,内容产业、文艺产业变现来讲其实是在潜移默化的,挺安静的在变化,但是我觉得爆发点还在后面。私人护理管家的相知、相伴,做最懂您肌肤秘密的私人管家,个性定制的皮肤分析测试仪器,给您最专业的报告参考,提供多项护肤品、彩妆使用建议,店面多项人性化服务定制,发掘属于您独一无二的美丽。而现有的授权模式难以做到这一点。

任务管理界面 (WEB)

支持在 WEB 界面 中对任务进行管理,例如:新增任务编辑任务启用/禁用任务手动执行任务 等。

任务的属性包括:

  • 任务名称
  • 执行方式
    • SHELL
    • HTTP
  • 表达式(*/5 * * * *)
  • 命令
  • 超时时间(秒)
  • 重试次数
  • 重试间隔(秒)
  • 执行结束是否通知
    • 不通知
    • 失败通知
    • 结束通知
    • 结果关键字匹配通知
  • 状态
  • 备注

当执行方式为 HTTP 时,支持选择请求方式 GETPOST

当设置执行结束通知时,支持选择通知方式 邮件 或 Webhook

当设置邮件通知时,支持输入邮箱地址多个用,分割;

当设置结果关键字匹配通知时,支持输入关键字多个用,分割;

任务增加完成后,会把任务数据持久化到 MySQL 中。

任务调度器

参考了两个开源组件:

最终选择使用 jakecoffman/cron ,后者是在前者的基础上做了一定的补充,例如 AddFunc() 增加了 name 参数,同时还增加了 RemoveJob(name string) 支持删除特定的任务。

/AddFunc adds a func to the Cron to be run on the given schedule.
func (c *Cron) AddFunc(spec string, cmd func(), name string) {
	c.AddJob(spec, FuncJob(cmd), name)
}

...

/RemoveJob removes a Job from the Cron based on name.
func (c *Cron) RemoveJob(name string) {
	if !c.running {
		i := c.entries.pos(name)

		if i == -1 {
			return
		}

		c.entries = c.entries[:i+copy(c.entries[i:], c.entries[i+1:])]
		return
	}

	c.remove <- name
}

对其简单封装下就可以使用了,下面是封装的方法,方法的具体实现与使用从 go-gin-api 中获取。

type Server interface {
	i()

	/Start 启动 cron 服务
	Start()

	/Stop 停止 cron 服务
	Stop()

	/AddTask 增加定时任务
	AddTask(task *cron_task_repo.CronTask)

	/RemoveTask 删除定时任务
	RemoveTask(taskId int)

	/AddJob 增加定时任务执行的工作内容
	AddJob(task *cron_task_repo.CronTask) cron.FuncJob
}

当调用 Start() 启动服务时,会把 MySQL 中的任务列表加载到调度器中。

通过以上方法,当从 WEB 界面 操作 新增、编辑、启用/禁用、手动执行任务时,可以动态的对调度器中的任务进行管理。

任务执行器

任务执行器指的是任务真实执行所在的机器。

我的思路是使用 Kafka 的发布与订阅功能,当调度器发现需要执行的任务时,将任务信息写到 KafkaTopic 中,任务执行器订阅相关的 Topic 获取任务信息然后执行任务。

如果任务的执行方式为 HTTP,那么任务执行器可以为一组集群,专门处理调用 HTTP 任务,这里可以为一个消费组(Consumer Group),也可适具体场景而定。

如果任务的执行方式为 SHELL,那么任务执行器必须在脚本所在的宿主机上,这里可以为一个具体任务的消费者。

如果任务量过多,可以考虑根据业务场景多设置几个 Topic

在项目中为了便于演示,不写入到 Kafka 中,仅记录了日志。

func (s *server) AddJob(task *cron_task_repo.CronTask) cron.FuncJob {
	return func() {
		s.taskCount.Add()
		defer s.taskCount.Done()

		msg := fmt.Sprintf("开始执行任务:(%d)%s [%s]", task.Id, task.Name, task.Spec)
		s.logger.Info(msg)
	}
}

日志目录:/logs/go-gin-api-cron.log

小结

本文纯属抛砖引玉,有问题,欢迎批评指正。

go-gin-api 项目安装简单,开箱即用,创建一个后台任务试试吧。

推荐阅读

作者:新亮笔记(关注公众号,可申请添加微信好友)
出处:/www_cnblogs_com/xinliangcoder
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

posted @ 2021-09-05 17:57  新亮笔记  阅读(114)  评论(0编辑  收藏  举报
旧版太阳城申博开户 申博真人游戏登入 188申博直属现金网登入 申博游戏登录官网 申博手机下载版 申博太阳城亚洲登入
www.360msc.com 申博www.sbc66.com直营网 申博体育直营网 菲律宾太阳城直营 申博游戏下载网址 申博138娱乐支付宝充值
申博官网下载直营网 旧版太阳城申博开户 申博线路检测 申博游戏手机版登入 申博娱乐手机版 申博真人游戏娱乐登入