實作 Google Cloud Pub/Sub Publisher
學習如何透過 Golang 來撰寫 Google Cloud Pub/Sub Publisher
文章目錄
接下來就開始進入動手做的部分吧,Repo 內已經包含寫好的範例讓大家能快速上手。
# Clone repo and restore dependencies
$ git clone https://github.com/life1347/go-google-cloud-pubsub-exmaple.git \
$GOPATH/src/tachingchen.com/googlePubSub
用 godep 復原相依套件
$ go get -u github.com/tools/godep
$ cd $GOPATH/src/tachingchen.com/googlePubSub && godep restore
開始進入程式碼前,先來看看如何執行會動的範例
$ GOOGLE_CLOUD_PROJECT="<your google project name>" go run publisher.go
$ GOOGLE_CLOUD_PROJECT="test-project" go run publisher.go
2017/01/04 01:04:21 4d27aaba-e62b-49cf-8fd9-e784a99064d5 send
2017/01/04 01:04:22 48b04306-18de-44f2-b1b3-c0e736f52d32 send
2017/01/04 01:04:24 d395cd6b-02ef-4e7d-a6ec-a84d0cf27045 send
2017/01/04 01:04:25 a56991b0-b664-48d7-8901-de80783f182d send
2017/01/04 01:04:26 d0cebf2f-619c-4642-b51b-d5485fd072c2 send
2017/01/04 01:04:28 46d25e6d-0f6b-4dc9-be88-8133e2a011e1 send
2017/01/04 01:04:29 dc517460-dc5b-4f61-ab20-490c186360a9 send
2017/01/04 01:04:30 f1ed3359-125b-4931-b631-d251a2109dcd send
2017/01/04 01:04:31 eaf771ca-c8e3-40ef-a89e-429b6bf8f55a send
2017/01/04 01:04:32 fb8b201c-2856-4bed-ac1a-3fc27d51bdac send
會動一百分
從上面結果可以看到程式持續送出十個訊息,那到底實際上 Publisher 在啟動後會做些什麼呢?
正如前面 Pub/Sub Flow 提到的,在開始傳送訊息前首先需要註冊 Topic,因此在 Publisher 起來時會呼叫 CreateTopicIfNotExists
,然後透過官方 pubsub package 的 CreateTopic
來創建 Topic。
- 完整程式碼請見 Publisher
// publisher.go
const topicName string = "example-topic"
topic := common.CreateTopicIfNotExists(client, topicName)
- 完整程式碼請見 Functions
// common/functions.go
func CreateTopicIfNotExists(client *pubsub.Client, name string) *pubsub.Topic {
ctx := context.Background()
topic := client.Topic(name)
isExist, err := topic.Exists(ctx)
if err != nil {
log.Fatal(err)
}
if isExist {
return topic
}
topic, err = client.CreateTopic(ctx, name)
if err != nil {
log.Fatalf("Failed to create topic: %v", err)
}
return topic
}
創建成功後,你可以在 GCP PubSub 頁面](https://console.cloud.google.com/cloudpubsub/) 上看到新增的 Topic。
由於 topic.Publish
的 Message.Data
型態為 []byte,假設想要傳送的訊息格式為 Json
,因此我們先將訊息以 json.Marshal
後帶進去當成 Payload 送出。
// publisher.go
for i := 0; i < 10; i++ {
msgUuid := uuid.NewV4().String()
// message we want to send to subscriber
session, _ := json.Marshal(&common.Session{
SessionID: msgUuid,
TimeStamp: time.Now().Unix(),
})
// publish message to Cloud Pub/Sub
_, _ = topic.Publish(ctx, &pubsub.Message{
Data: session,
})
log.Printf("%s send", msgUuid)
time.Sleep(1 * time.Second)
}
如此簡單就完成 Publisher,接下來就來看看如何使用 Golang 來實作 Subscriber 吧
相關文章
- 實作 Google Cloud Pub/Sub Push Subscription
- 實作 Google Cloud Pub/Sub Pull Subscription
- 初探 Google Cloud Pub/Sub
- 在 Kubernetes 內取得使用者 IP - HTTP Loadbalancer
- 從 Google Kubernetes Engine 移除節點
文章內容的轉載、重製、發佈,請註明出處: https://tachingchen.com/tw/
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email