Wechat_pusher - 基于 Golang 开发的微信消息定时推送框架
2017-09-19 17:55
861 查看
wechat_pusher
Github
https://github.com/hundredlee/wechat_pusher欢迎star && fork
功能列表
消息推送模板消息推送 model -> message.go task -> template_task.go
图片推送(TODO)
文字推送(TODO)
图文推送(TODO)
日志存储
计划任务
如何开始?
第一步:当然是go get
go get github.com/hundredlee/wechat_pusher.git项目结构如下:
├── README.md ├── config │ └── config.go ├── config.conf ├── config.conf.example ├── enum │ └── task_type.go ├── glide.lock ├── glide.yaml ├── hlog │ ├── filelog.go │ ├── filelog_test.go │ └── hlog.go ├── main.go ├── main.go.example ├── models │ ├── message.go │ └── token.go ├── redis │ ├── redis.go │ └── redis_test.go ├── statics │ └── global.go ├── task │ ├── task.go │ └── template_task.go ├── utils │ ├── access_token.go │ ├── crontab.go │ └── push.go └── vendor └── github.com
第二步:创建一个项目
创建配置文件
项目根目录有一个config.conf.example,重命名为config.conf即可内容如下:
[WeChat] APPID= SECRET= TOKEN= [Redis] POOL_SIZE= TIMEOUT= HOST= PASS= DB= [Log] LOG_PATH=WeChat 部分
APPID && SECRET && TOKEN 这些是微信开发者必须了解的东西。不细讲
Redis 部分
POOL_SIZE 连接池大小 ,整型 int
TIMEOUT 连接超时时间 ,整型 int
HOST 连接的IP 字符串 string
PASS 密码 字符串 string
DB 数据库选择 整型 int
Log 部分
LOG_PATH 日志存放文件夹,例如值为 wechat_log,那么完整的目录应该是 GOPATH/wechat_log
调用的时候这么写:
conf := config.Instance() //例如wechat 的 appid appId := conf.ConMap["WeChat.APPID"]
模板怎么配置
以模板消息作为例子说明:message.go 是模板消息的结构
template_task.go 是将一个模板消息封装成任务(template_task.go 是实现了接口task.go的)
mess := models.Message{ ToUser: "openid", TemplateId: "templateid", Url: "url", Data: models.Data{ First: models.Raw{"xxx", "#173177"}, Subject: models.Raw{"xxx", "#173177"}, Sender: models.Raw{"xxx", "#173177"}, Remark: models.Raw{"xxx", "#173177"}}} //封装成一个任务,TemplateTask表示模板消息任务task := task.TemplateTask{} task.SetTask(mess)以上代码是模板消息的配置,这个微信开发者应该都能看懂。
如何创建一个任务
例如我们要创建一个模板消息定时推送任务第一步,封装任务
第二步,添加任务,并设置任务类型、并发执行的个数、失败尝试次数等。
第三步,启动任务
我们用示例代码演示整个完整的过程
package main import ( "github.com/hundredlee/wechat_pusher/enum" "github.com/hundredlee/wechat_pusher/models" "github.com/hundredlee/wechat_pusher/task" "github.com/hundredlee/wechat_pusher/utils" "runtime" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) var tasks []task.Task tasks = make([]task.Task, 100) mess := models.Message{ ToUser: "oBv9cuLU5zyI27CtzI4VhV6Xabms", TemplateId: "UXb6s5dahNC5Zt-xQIxbLJG1BdP8mP73LGLhNXl68J8", Url: "http://baidu.com", Data: models.Data{ First: models.Raw{"xxx", "#173177"}, Subject: models.Raw{"xxx", "#173177"}, Sender: models.Raw{"xxx", "#173177"}, Remark: models.Raw{"xxx", "#173177"}}} task := task.TemplateTask{} task.SetTask(mess) for i := 0; i < 100; i++ { tasks[i] = &task } utils.NewPush(&utils.Push{ Tasks:tasks, TaskType:enum.TASK_TYPE_TEMPLATE, Retries:4, BufferNum:10, }).Add("45 * * * * *") utils.StartCron() }Add方法里面填写的是执行的时间
("10 *") 表示每分钟的第十秒钟执行一次。
("@hourly") 每小时执行一次
具体请参照 https://github.com/robfig/cron/blob/master/doc.go
本推送服务的计划任务是由 https://github.com/robfig/cron 实现的。
Run
很简单,当你组装好所有的task以后,直接运行一句话就可以了。
utils.NewPush(&utils.Push{ Tasks:tasks, TaskType:enum.TASK_TYPE_TEMPLATE, Retries:4, BufferNum:10, }).Add("45 * * * * *") utils.StartCron()原文链接:https://segmentfault.com/a/1190000009796394
相关文章推荐
- 用c#开发微信(3)基于Senparc.Weixin框架的接收普通消息处理 (源码下载)
- 用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)
- 【wechat】微信开发——微信验证与处理请求(关注后推送消息)
- 用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)
- java微信开发框架wechat4j入门教程
- thinkphp框架下的微信验证、关注回复图文,文本、向用户推送消息、首次登录入库或更新用户资料等
- Nodejs微信开发使用wechat-api回复多条消息
- [置顶] 企业微信开发[windows服务定时发送消息]
- 微信公共服务平台开发(.Net 的实现)11-------客服消息(定项消息推送 重要的OPENID)
- 微信公共服务平台开发(.Net 的实现)11-------客服消息(定项消息推送 重要的OPENID)
- java微信开发(wechat4j)——发送客服消息
- 微信开发 消息推送实现代码
- 关于微信接收事件以及推送消息相关的java开发
- vLang-基于模型的微信开发框架,使用Python
- java微信开发框架wechat4j入门教程
- 微信公共服务平台开发(.Net 的实现)11-------客服消息(定项消息推送 重要的OPENID)
- 微信开发 消息推送实现代码
- 我开发的一个微信快速开发框架(WechaT Framework,简称WTF)
- 微信公共服务平台开发(.Net 的实现)11-------客服消息(定项消息推送 重要的OPENID)