wechat_pusher : 基於Golang開發的微信訊息定時推送框架
wechat_pusher
Github
- https://github.com/hundredlee/wechat_pusher
- 歡迎star && fork && watch
- 學Golang不久,寫一個開源練練手。希望大家提提建議。謝謝
功能列表
- 訊息推送
- 模板訊息推送
- 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(tasks).SetTaskType(enum.TASK_TYPE_TEMPLATE).SetRetries(4).SetBufferNum(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(tasks).SetTaskType(enum.TASK_TYPE_TEMPLATE).SetRetries(4).SetBufferNum(10).Add("45 * * * * *")
utils.StartCron()
Contributor
- HundredLee https://github.com/hundredlee
- Cospotato https://github.com/cospotato
相關文章
- 微信開發推送訊息案例
- 微信雲託管 WebSocket 實戰:基於模版實現訊息推送Web
- iOS開發訊息推送原理iOS
- PHP基於Redis訊息佇列實現的訊息推送的方法PHPRedis佇列
- 基於 Golang 開發的分散式定時任務管理系統Golang分散式
- 基於 Hyperf 實現 RabbitMQ + WebSocket 訊息推送MQWeb
- 微信開發中的訊息驗證與訊息回覆
- 基於workerman實現的web訊息推送站內信功能Web
- 實時訊息推送方案-SSE
- C++訊息框架-基於sigslotC++框架
- 微信小程式模板訊息還能群發?無限制推送?微信小程式
- Knative 實戰:基於 Kafka 實現訊息推送Kafka
- PHP轉Go系列 | ThinkPHP與Gin框架之打造基於WebSocket技術的訊息推送中心PHPGo框架Web
- 基於THINKPHP5 多微信開發框架,讓微信開發飛起來PHP框架
- 微信開發——同步粉絲、群發訊息
- PHP微信開發之模板訊息回覆PHP
- 微信小程式開發(十七)模板訊息微信小程式
- Java微信公眾號推送模版訊息的方法示例Java
- 小飛魚開發 做一個定時監控資料傳送微信訊息的定時任務功能(圖文)
- 基於xmpp openfire smack開發之Android訊息推送技術原理分析和實踐[4]MacAndroid
- Android 基於Netty的訊息推送方案之Hello World(一)AndroidNetty
- 基於XMPP協議(openfire伺服器)的訊息推送實現協議伺服器
- 基於mpvue框架搭建微信小程式開發環境Vue框架微信小程式開發環境
- PHP與反ajax推送,實現的訊息實時推送功能PHP
- RocketMQ定時/延時訊息MQ
- 微信公眾號開發之客服訊息
- 微信怎麼群發訊息?微信群發助手群發訊息圖文教程
- golang實時訊息平臺NSQ的使用Golang
- RocketMQ 訊息整合:多型別業務訊息——定時訊息MQ多型型別
- 基於gin的golang web開發:路由GolangWeb路由
- 基於gin的golang web開發:dockerGolangWebDocker
- 基於WebSocket的實時訊息傳遞設計Web
- 用 Laravel 自帶訊息模組搭建小程式實時推送訊息Laravel
- FCM設定推送訊息的時效性(若目標裝置沒有在限定時間內收到推送則放棄推送)
- golang 封裝 rabbitmq,正常訊息,延時訊息,非炫技,僅記錄(golang新人)Golang封裝MQ
- 基於itchat實現微信群訊息同步機器人機器人
- 寶塔皮膚計劃任務定時推送公眾號模板訊息
- Android 基於Netty的訊息推送方案之概念和工作原理(二)AndroidNetty