sangoの使い方 - Golang編¶
Go言語からsangoを使う方法について説明します。
Go言語でsangoを使うには以下の手順で行います。
go getでライブラリの取得
クライアントの実装
確認した環境
go 1.3
mqtt-golang 4572889cc6f741a610af3bb5447c90c03bfb763f
1. go getでライブラリの取得¶
eclipse pahoのgolangライブラリを go get
で取得します。
go get git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.golang.git
2. クライアントの実装¶
Connect¶
Connect部分はPub/Subともに共通です。
package main
import (
"fmt"
"log"
"time"
MQTT "git.eclipse.org/gitroot/paho/org.eclipse.paho.mqtt.golang.git"
)
func main() {
host := "free.mqtt.shiguredo.jp"
port := 1883
user := "example@github"
password := "<password>"
// 接続用の設定を作成します
opts := MQTT.NewClientOptions()
opts.SetUsername(user)
opts.SetPassword(password)
// golangではURIで接続先を指定します。
brokerUri := fmt.Sprintf("tcp://%s:%d", host, port)
opts.AddBroker(brokerUri)
// 設定を元にクライアントを作成します
client := MQTT.NewClient(opts)
// Connectします
_, err := client.Start()
if err != nil {
log.Fatal(err)
}
}
Subscribe¶
Subscribeは StartSubscription
という関数にコールバック関数を渡しま
す。
func onMessageReceived(client *MQTT.MqttClient, message MQTT.Message) {
fmt.Printf("Received message on topic: %s\n", message.Topic())
fmt.Printf("Message: %s\n", message.Payload())
}
func Subscribe(client *MQTT.MqttClient) error {
topic := "example@github/a/b"
qos := 0
// Subscribeするtopicを設定します
topicFilter, err := MQTT.NewTopicFilter(topic, byte(qos))
if err != nil {
return err
}
// Subscribeします
// onMessageReceived はメッセージが届いたら呼び出されるコールバックです
_, err = client.StartSubscription(onMessageReceived, topicFilter)
if err != nil {
return err
}
// そのままではプロセスが終わってしまいますので、待ち受けます
for {
time.Sleep(1 * time.Second)
}
}
Publish¶
Publishには Publish
を使います。あるいは、 MQTT.Message を使う
PublishMessage
という関数もあります。
func Publish(client *MQTT.MqttClient) error {
topic := "example@github/a/b"
qos := 0
message := "MQTT from golang"
receipt := client.Publish(MQTT.QoS(qos), topic, message)
<-receipt // Publish成功を待ち受ける
return nil
}
Comments
comments powered by Disqus