wechat_pusher - 基於Golang開發的微信訊息定時推送架構

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

wechat_pusher

Github

  • https://github.com/hundredlee...

  • 歡迎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 的 appidappId := 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 mainimport (    "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/cro...

  • 本推送服務的計劃任務是由 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()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.