このトピックでは、Go 用 SDK のバージョンと使用上の注意について説明します。また、サンプルコードも提供します。
手順
最新バージョンの Go 用 SDK をダウンロードした後、パッケージを解凍し、
aliyun-mns-go-sdkディレクトリに移動します。exampleディレクトリに移動し、queue_example.goファイルまたはtopic_example.goファイルで SMQ インスタンスへのアクセスに使用するエンドポイントを変更します。環境変数でALIBABA_CLOUD_ACCESS_KEY_IDとALIBABA_CLOUD_ACCESS_KEY_SECRETを構成します。エンドポイントについては、[キューの詳細]/[トピックの詳細] ページの [基本情報] タブの [エンドポイント] を参照してください。

サンプルコード
キューベースのメッセージングモデル
次のサンプルコードは、キューの作成、メッセージの送信、メッセージの受信、メッセージの削除、およびキューの削除を行う方法の例を示しています。
package main
// 必要なパッケージをインポートします
import (
"fmt"
"log"
"net/http"
_ "net/http/pprof"
"time"
"github.com/aliyun/aliyun-mns-go-sdk"
"github.com/gogap/logs"
)
func main() {
go func() {
log.Println(http.ListenAndServe("localhost:8080", nil))
}()
// 独自のエンドポイントに置き換えます。
endpoint := "http://xxx.mns.cn-hangzhou.aliyuncs.com"
client := ali_mns.NewClient(endpoint)
msg := ali_mns.MessageSendRequest{
MessageBody: "hello <\"aliyun-mns-go-sdk\">",
DelaySeconds: 0,
Priority: 8}
queueManager := ali_mns.NewMNSQueueManager(client)
queueName := "test-queue"
err := queueManager.CreateQueue(queueName, 0, 65536, 345600, 30, 0, 3)
time.Sleep(time.Duration(2) * time.Second)
if err != nil && !ali_mns.ERR_MNS_QUEUE_ALREADY_EXIST_AND_HAVE_SAME_ATTR.IsEqual(err) {
fmt.Println(err)
return
}
queue := ali_mns.NewMNSQueue(queueName, client)
for i := 1; i < 10000; i++ {
ret, err := queue.SendMessage(msg)
go func() {
fmt.Println(queue.QPSMonitor().QPS())
}()
if err != nil {
fmt.Println(err)
} else {
logs.Pretty("response: ", ret)
}
endChan := make(chan int)
respChan := make(chan ali_mns.MessageReceiveResponse)
errChan := make(chan error)
go func() {
select {
case resp := <-respChan:
{
logs.Pretty("response: ", resp)
logs.Debug("change the visibility: ", resp.ReceiptHandle)
if ret, e := queue.ChangeMessageVisibility(resp.ReceiptHandle, 5); e != nil {
fmt.Println(e)
} else {
logs.Pretty("visibility changed", ret)
logs.Debug("delete it now: ", ret.ReceiptHandle)
if e := queue.DeleteMessage(ret.ReceiptHandle); e != nil {
fmt.Println(e)
}
endChan <- 1
}
}
case err := <-errChan:
{
fmt.Println(err)
endChan <- 1
}
}
}()
queue.ReceiveMessage(respChan, errChan, 30)
<-endChan
}
}トピックベースのメッセージングモデル
次のサンプルコードは、キューの作成、トピックの作成、トピックのサブスクライブ、およびメッセージのパブリッシュを行う方法の例を示しています。
package main
// 必要なパッケージをインポートします
import (
"fmt"
"time"
"github.com/aliyun/aliyun-mns-go-sdk"
"github.com/gogap/logs"
)
func main() {
// 独自のエンドポイントに置き換えます。
endpoint := "http://xxx.mns.cn-hangzhou.aliyuncs.com"
queueName := "test-queue"
topicName := "test-topic"
queueSubName := "test-sub-queue"
httpSubName := "test-sub-http"
client := ali_mns.NewClient(endpoint)
// 1. プッシュされたメッセージを受信するためのキューを作成します
queueManager := ali_mns.NewMNSQueueManager(client)
err := queueManager.CreateSimpleQueue(queueName)
if err != nil && !ali_mns.ERR_MNS_QUEUE_ALREADY_EXIST_AND_HAVE_SAME_ATTR.IsEqual(err) {
fmt.Println(err)
return
}
// 2. トピックを作成します
topicManager := ali_mns.NewMNSTopicManager(client)
// topicManager.DeleteTopic("testTopic")
err = topicManager.CreateSimpleTopic(topicName)
if err != nil && !ali_mns.ERR_MNS_TOPIC_ALREADY_EXIST_AND_HAVE_SAME_ATTR.IsEqual(err) {
fmt.Println(err)
return
}
topic := ali_mns.NewMNSTopic(topicName, client)
// 3. トピックをサブスクライブします。エンドポイントはキューです
queueSub := ali_mns.MessageSubsribeRequest{
Endpoint: topic.GenerateQueueEndpoint(queueName),
NotifyContentFormat: ali_mns.SIMPLIFIED,
}
// 4. トピックをサブスクライブします。エンドポイントは HTTP(S) です
httpSub := ali_mns.MessageSubsribeRequest{
Endpoint: "http://www.baidu.com",
NotifyContentFormat: ali_mns.SIMPLIFIED,
}
err = topic.Subscribe(queueSubName, queueSub)
if err != nil && !ali_mns.ERR_MNS_SUBSCRIPTION_ALREADY_EXIST_AND_HAVE_SAME_ATTR.IsEqual(err) {
fmt.Println(err)
return
}
err = topic.Subscribe(httpSubName, httpSub)
if err != nil && !ali_mns.ERR_MNS_SUBSCRIPTION_ALREADY_EXIST_AND_HAVE_SAME_ATTR.IsEqual(err) {
fmt.Println(err)
return
}
/*
sub = ali_mns.MessageSubsribeRequest{
Endpoint: topic.GenerateMailEndpoint("a@b.com"),
NotifyContentFormat: ali_mns.SIMPLIFIED,
}
err = topic.Subscribe("SubscriptionNameB", sub)
if (err != nil && !ali_mns.ERR_MNS_SUBSCRIPTION_ALREADY_EXIST_AND_HAVE_SAME_ATTR.IsEqual(err)) {
fmt.Println(err)
return
}
*/
time.Sleep(time.Duration(2) * time.Second)
// 5. メッセージをパブリッシュします
msg := ali_mns.MessagePublishRequest{
MessageBody: "hello topic <\"aliyun-mns-go-sdk\">",
MessageAttributes: &ali_mns.MessageAttributes{
MailAttributes: &ali_mns.MailAttributes{
Subject: "AAA 中国語の文字", // メール件名を日本語に翻訳
AccountName: "BBB",
},
},
}
_, err = topic.PublishMessage(msg)
if err != nil {
fmt.Println(err)
return
}
// 6. キューからメッセージを受信します
queue := ali_mns.NewMNSQueue(queueName, client)
endChan := make(chan int)
respChan := make(chan ali_mns.MessageReceiveResponse)
errChan := make(chan error)
go func() {
select {
case resp := <-respChan:
{
logs.Pretty("response: ", resp)
fmt.Println("change the visibility: ", resp.ReceiptHandle)
if ret, e := queue.ChangeMessageVisibility(resp.ReceiptHandle, 5); e != nil {
fmt.Println(e)
} else {
logs.Pretty("visibility changed", ret)
fmt.Println("delete it now: ", ret.ReceiptHandle)
if e := queue.DeleteMessage(ret.ReceiptHandle); e != nil {
fmt.Println(e)
}
endChan <- 1
}
}
case err := <-errChan:
{
fmt.Println(err)
endChan <- 1
}
}
}()
queue.ReceiveMessage(respChan, errChan, 30)
<-endChan
}リリースノート
バージョン 1.0.11
リリース日 | 説明 | ダウンロード URL |
2025-03-20 |
|
バージョン 1.0.10
リリース日 | 説明 | ダウンロード URL |
2025-03-17 | 以下の問題が修正されました。 |
バージョン 1.0.9
リリース日 | 説明 | ダウンロード URL |
2025-03-11 | バージョンエラー issues#26 が修正されました。このエラーは、機密ファイル内の無効な |
バージョン 1.0.8
リリース日 | 説明 | ダウンロード URL |
2025-02-06 | キューの作成時またはプロパティの設定時に |
バージョン 1.0.7
リリース日 | 説明 | ダウンロード URL |
2025-01-23 |
|
バージョン 1.0.6
リリース日 | 説明 | ダウンロード URL |
2024-11-13 |
|
バージョン 1.0.5
リリース日 | 説明 | ダウンロード URL |
2024-08-19 |
|
バージョン 1.0.4
リリース日 | 説明 | ダウンロード URL |
2024-07-17 |
|
バージョン 1.0.3
リリース日 | 説明 | ダウンロード URL |
2024-05-21 | HTTP クライアントの転送属性を設定できるようになりました。 |
バージョン 1.0.2
リリース日 | 説明 | ダウンロード URL |
2021-03-05 | OpenService 操作が提供されます。 |
バージョン 1.0.1
リリース日 | 説明 | ダウンロード URL |
2021-01-15 |
|
バージョン 1.0.0
リリース日 | 説明 | ダウンロード URL |
2019-04-30 |
|