Gorush 輕量級手機訊息傳送服務
文章轉錄自: Gorush 輕量級手機訊息傳送服務
今年第一次參加濁水溪以南最大研討會 Mopcon,給了一場議程叫『用 Go 語言打造輕量級 Push Notification 服務』,身為南部人一定要參加 Mopcon,剛好透過此議程順便釋出新版 Gorush,其實今年投稿 Mopcon 最主要是回家鄉宣傳 Google 所推出的 Go 語言,藉由實際案例來跟大家分享如何入門 Go 語言,以及用 Go 語言最大好的好處有哪些。底下是此議程大綱:
- 為什麼建立 Gorush 專案
- 如何用 Go 語言實作
- 用 Drone 自動化測試及部署
- 在 Kubernetes 上跑 Gorush
什麼是 Gorush
Gorush 是一套輕量級的 Push Notification 服務,此服務只做一件事情,就是傳送訊息給 Google Andriod 或 Apple iOS 手機,啟動時預設跑在 8088
port,可以透過 Docker 或直接用 Command line 執行,對於 App 開發者,可以直接下載執行檔,在自己電腦端傳送訊息給手機測試。藉由這次投稿順便釋出了新版本。底下來說明新版本多了哪些功能。
支援 RPC 協定
在此之前 Gorush 只有支援 REST API 方式,也就是透過 JSON 方式來通知伺服器來傳送訊息,新版了多了 RPC 方式,這邊我是使用 gRPC 來實作,Gorush 預設是不啟動 gRPC 服務,你必須要透過引數方式才可以啟動,詳細可以參考此檔案,底下是 Go 語言客戶端範例:
package main
import (
"log"
pb "github.com/appleboy/gorush/rpc/proto"
"golang.org/x/net/context"
"google.golang.org/grpc"
)
const (
address = "localhost:9000"
)
func main() {
// Set up a connection to the server.
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
c := pb.NewGorushClient(conn)
r, err := c.Send(context.Background(), &pb.NotificationRequest{
Platform: 2,
Tokens: []string{"1234567890"},
Message: "test message",
})
if err != nil {
log.Fatalf("could not greet: %v", err)
}
log.Printf("Success: %t\n", r.Success)
log.Printf("Count: %d\n", r.Counts)
}
支援 ARM64 Docker 映像檔
目前已經支援 ARM64 的 Docker 版本,所以可以在 ARM64 板子內用 Docker 來執行,可以直接在 Docker Hub 找到相對應的標籤
支援全域變數
Gorush 本身支援 Yaml 設定檔,但是每次想要改設定,都要重新修改檔案,這不是很方便,所以我透過 Viper 套件來讓 Gorush 同時支援 Yaml 設定,或 Global 變數,也就是以後都可以透過變數方式來動態調整,有了這方式就可以讓 Docker 透過環境變數來設定。底下是範例讓開發者動態調整 HTTP 服務 Port。請注意所有變數的前置符號為 GORUSH_
$ GORUSH_CORE_PORT=8089 gorush
支援 Kubernetes
此版增加了 Kubernetes 設定方式,有了上述的全域變數支援,這時候設定 Kubernetes 就更方便了,請直接參考 k8s 目錄,詳細安裝步驟請參考此說明,底下是透過 ENV 動態設定 Gorush
env:
- name: GORUSH_STAT_ENGINE
valueFrom:
configMapKeyRef:
name: gorush-config
key: stat.engine
- name: GORUSH_STAT_REDIS_ADDR
valueFrom:
configMapKeyRef:
name: gorush-config
key: stat.redis.host
iOS 支援動態傳送到開發或正式環境
在此之前傳送訊息到 iOS 手機,都必須在啟動伺服器前將 iOS 環境設定好,現在可以動態調整 JSON 引數。
{
"notifications": [
{
"tokens": ["token_a", "token_b"],
"platform": 1,
"message": "Hello World iOS!"
}
]
}
可以加上 development
或 production
布林引數,底下是將訊息傳給 iOS 開發伺服器
{
"notifications": [
{
"tokens": ["token_a", "token_b"],
"platform": 1,
"development": true,
"message": "Hello World iOS!"
}
]
}
投影片
底下是議程投影片,有興趣的參考看看
https://www.slideshare.net/appleboy/gorush-a-push-notification-server-written-in-go
最後有講到如何部署及測試 Go 語言,這邊講了一下 Drone 這套自動化測試工具。如果大家有興趣可以參考我在 Udemy 開設的課程,目前特價 1600 元。Drone 幫忙開發者自動化測試,部署到 Docker Hub 或編譯出執行檔,這些在 Drone 裡面都可以透過 YAML
來設定,開發者只需要專注於寫程式就可以了。
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 可執行資訊和傳送訊息的服務?
- 分散式事務:訊息可靠傳送分散式
- 以事務方式傳送 Kafka 訊息Kafka
- HTTPSQS:基於 HTTP協議的輕量級開源簡單訊息佇列服務HTTP協議佇列
- 訊息中介軟體—RocketMQ訊息傳送MQ
- 【RocketMQ】MQ訊息傳送MQ
- RocketMQ(八):訊息傳送MQ
- iOS 傳送位置訊息iOS
- 鴻蒙傳送訊息通知鴻蒙
- 快速搭建輕量級git服務GogsGitGo
- ben-evans:WhatsApp日訊息量超過全球簡訊傳送量APP
- Redis 訊息中介軟體 ServiceStack.Redis 輕量級Redis
- RocketMQ(九):訊息傳送(續)MQ
- TNW-傳送模板訊息TNW
- 6-RocketMQ傳送訊息MQ
- springboot 專案使用阿里雲簡訊服務傳送手機驗證碼Spring Boot阿里
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- 千牛自動傳送訊息怎麼發?來試試UiBot千牛訊息傳送機器人UI機器人
- Ovum:2011年亞太區傳送手機簡訊,圖片和影音訊息數量達3.5兆億封音訊
- 多種訊息傳送機制,處理合適不??
- Android基本功:Handler訊息傳送機制Android
- RocketMQ中Producer訊息的傳送MQ
- 傳送不同型別的訊息型別
- RocketMQ -- 訊息傳送儲存流程MQ
- Kafka -- 訊息傳送儲存流程Kafka
- 快速向 Google Chat 傳送訊息Go
- iOS 給父類傳送訊息iOS
- 小程式傳送訂閱訊息
- 輕量訊息中介軟體ZeroMQMQ
- RabbitMQ,RocketMQ,Kafka 事務性,訊息丟失和訊息重複傳送的處理策略MQKafka
- 訊息sms 郵箱/手機號/push傳送的方案 & 定時任務xxlJob靈活度 & 泛型和傳送的模板類設計泛型
- Runtime備忘-訊息傳送流程
- django+小程式傳送模板訊息Django
- Python呼叫飛書傳送訊息Python
- WIN32傳送自定義訊息Win32
- 傳送kafka訊息的shell指令碼Kafka指令碼
- 一張圖進階 RocketMQ - 訊息傳送MQ
- RocketMQ - 生產者訊息傳送流程MQ