{"id":29182327,"url":"https://github.com/lufred/goworker","last_synced_at":"2025-07-01T20:05:25.510Z","repository":{"id":57633853,"uuid":"453285979","full_name":"LuFred/goworker","owner":"LuFred","description":"go实现的worker框架","archived":false,"fork":false,"pushed_at":"2022-01-29T06:38:09.000Z","size":53,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-01T20:03:26.659Z","etag":null,"topics":["distributed-systems","golang","microservice-framework","worker","worker-pool","workflow","workflow-engine"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LuFred.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-29T03:29:38.000Z","updated_at":"2024-11-20T01:26:51.000Z","dependencies_parsed_at":"2022-09-06T21:40:50.875Z","dependency_job_id":null,"html_url":"https://github.com/LuFred/goworker","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/LuFred/goworker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuFred%2Fgoworker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuFred%2Fgoworker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuFred%2Fgoworker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuFred%2Fgoworker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LuFred","download_url":"https://codeload.github.com/LuFred/goworker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuFred%2Fgoworker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263029215,"owners_count":23402354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["distributed-systems","golang","microservice-framework","worker","worker-pool","workflow","workflow-engine"],"created_at":"2025-07-01T20:02:48.976Z","updated_at":"2025-07-01T20:05:24.821Z","avatar_url":"https://github.com/LuFred.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://img.shields.io/github/languages/code-size/lufred/goworker)\n![](https://img.shields.io/github/v/tag/lufred/goworker)\n![](https://img.shields.io/github/license/lufred/goworker)\n\n# worker\nworker是一个后台常驻服务库，就像创建一个操作系统服务。  \n\n# 适用场景：\n* 长时间后台处理任务\n* mq数据消费服务\n* 定时计划\n* 异步任务处理\n\n# 待支持\n* 脚本任务（linux脚本）\n* 失效转移（当某个实例在执行任务中宕机时，将重新由其它实例执行）\n* 支持后台动态添加任务,支持Cron任务暂停,支持手动停止正在执行的任务(有条件)\n* 任务依赖，多任务关联执行\n* 监控\n\n# 支持\n* 服务集群,任务分片\n* cron\n* 出错重试\n* 自定义重试策略\n* 自定义logger配置\n\n# [Example](/examples)\n\n# Getting Started\n\n1. 定义worker类\n实现接口：Handler\n```go\ntype Handler interface {\n    Before(ctx context.Context) error\n    Do(ctx context.Context) error\n    After(ctx context.Context) error\n    ErrorMessage(ctx context.Context, err error)\n}\n```\n\n执行顺序：  \nBefore -\u003e Do -\u003e After  \nErrorMessage贯穿handler的执行全周期，负责接收执行期间出现的error\n\n2. 开始使用\n例子\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"github.com/lufred/goworker\"\n\t\"github.com/lufred/goworker/config\"\n)\n\nfunc main() {\n\tw := goworker.NewWorker(\n\t\tcontext.Background(),\n\t\tconfig.DefaultWorkerConfig(),\n\t\t\u0026MyWorker{})\n\n\tif err := w.Run(); err != nil {\n\t\tfmt.Println(err)\n\t\treturn\n\t}\n\tif err := w.Wait(); err != nil {\n\t\tfmt.Println(err.Error())\n\t}\n}\n\ntype MyWorker struct {\n}\n\nfunc (w *MyWorker) Before(ctx context.Context) error {\n\tfmt.Println(\"任务初始化\")\n\treturn nil\n}\n\nfunc (w *MyWorker) Do(ctx context.Context) error {\n\tfmt.Println(\"任务执行中：helloWorld\")\n\treturn nil\n}\n\nfunc (w *MyWorker) After(ctx context.Context) error {\n\tfmt.Println(\"任务处理完成\")\n\treturn nil\n}\n\nfunc (w *MyWorker) ErrorMessage(ctx context.Context, err error) {\n\tfmt.Println(fmt.Sprintf(\"err:%+v\", err))\n}\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flufred%2Fgoworker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flufred%2Fgoworker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flufred%2Fgoworker/lists"}