All Products
Search
Document Center

Simple Message Queue (formerly MNS):Go SDK

Last Updated:Jun 21, 2026

Topik ini menyediakan catatan rilis, panduan penggunaan, dan contoh kode untuk SDK for Go.

Penggunaan

  1. Unduh dan ekstrak versi terbaru SDK for Go, lalu buka direktori root aliyun-mns-go-sdk.

  2. Buka direktori example. Pada file queue_example.go atau topic_example.go, ganti placeholder endpoint dengan endpoint instans Anda. Selanjutnya, atur variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.

    Anda dapat menemukan endpoint tersebut di bagian Endpoint pada halaman Queue Details atau Topic Details di konsol. Endpoint instans terdapat di bagian Endpoint pada halaman Queue Details di konsol Simple Message Queue, yang mencantumkan baik endpoint publik maupun internal.

Contoh kode

Model Antrian

Contoh ini membuat antrian, mengirim pesan, menerima dan menghapus pesan, lalu menghapus antrian tersebut.

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))
	}()
	// Ganti dengan endpoint Anda sendiri.
	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
	}
}

Model Topik

Contoh ini membuat antrian dan topik, berlangganan ke topik tersebut, lalu menerbitkan pesan.

package main
import (
	"fmt"
	"time"
	"github.com/aliyun/aliyun-mns-go-sdk"
	"github.com/gogap/logs"
)
func main() {
	// Ganti dengan endpoint Anda sendiri.
	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. buat antrian untuk menerima pesan yang didorong
	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. buat topik
	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. berlangganan ke topik, endpoint-nya adalah antrian
	queueSub := ali_mns.MessageSubsribeRequest{
		Endpoint:            topic.GenerateQueueEndpoint(queueName),
		NotifyContentFormat: ali_mns.SIMPLIFIED,
	}
	// 4. berlangganan ke topik, endpoint-nya adalah 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. sekarang terbitkan pesan
	msg := ali_mns.MessagePublishRequest{
		MessageBody: "hello topic <\"aliyun-mns-go-sdk\">",
		MessageAttributes: &ali_mns.MessageAttributes{
			MailAttributes: &ali_mns.MailAttributes{
				Subject:     "AAA Chinese characters",
				AccountName: "BBB",
			},
		},
	}
	_, err = topic.PublishMessage(msg)
	if err != nil {
		fmt.Println(err)
		return
	}
	// 6. terima pesan dari antrian
	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
}

Catatan Rilis

Versi 1.0.11

Tanggal rilis

Deskripsi

Unduh

2025-03-20

Mengembalikan dependensi golang.org/x/net dari v0.36.0 ke v0.33.0.

Download SDK

Versi 1.0.10

Tanggal rilis

Deskripsi

Unduh

2025-03-17

Memperbaiki masalah gagalnya pemeriksaan wilayah saat membuat sumber daya endpoint yang diakhiri dengan -control.

Download SDK

Versi 1.0.9

Tanggal rilis

Deskripsi

Unduh

2025-03-11

Memperbaiki issues#26, yaitu kesalahan akibat komponen StsTokenCredential yang tidak ada dalam paket kredensial.

Download SDK

Versi 1.0.8

Tanggal rilis

Deskripsi

Unduh

2025-02-06

Menambahkan dukungan untuk mengonfigurasi parameter logEnable selama pembuatan antrian dan pembaruan properti.

Download SDK

Versi 1.0.7

Tanggal rilis

Deskripsi

Unduh

2025-01-23

  • Menambahkan contoh encoding dan decoding Base64 ke queue_example.go.

  • Menambahkan dukungan untuk kredensial dinamis.

Download SDK

Versi 1.0.6

Tanggal rilis

Deskripsi

Unduh

2024-11-13

  • Menambahkan topic_example.go, contoh langganan endpoint HTTP dalam model pesan berbasis topik.

  • Menambahkan http_authorization.go, contoh verifikasi signature HTTP.

  • Menghapus pemeriksaan ukuran isi pesan untuk memungkinkan pesan yang lebih besar.

Download SDK

Versi 1.0.5

Tanggal rilis

Deskripsi

Unduh

2024-08-19

Memperbarui versi minimum Go yang dideklarasikan dalam file go.mod untuk memperbaiki kegagalan build.

Download SDK

Versi 1.0.4

Tanggal rilis

Deskripsi

Unduh

2024-07-17

  • Menambahkan dukungan untuk menyesuaikan nilai maxConnsPerHost pada client.

  • Menyertakan informasi versi SDK dan OS dalam detail client.

  • Menambahkan metode inisialisasi client yang mendukung pembacaan konfigurasi dari variabel lingkungan.

Download SDK

Versi 1.0.3

Tanggal rilis

Deskripsi

Unduh

2024-05-21

Menambahkan dukungan untuk konfigurasi Transport HTTP kustom.

Download SDK

Versi 1.0.2

Tanggal rilis

Deskripsi

Unduh

2021-03-05

Menambahkan dukungan untuk API OpenService.

Download SDK

Versi 1.0.1

Tanggal rilis

Deskripsi

Unduh

2021-01-15

  • Menambahkan dukungan untuk mengatur timeout.

  • Menyertakan Request ID dalam respons.

Download SDK

Versi 1.0.0

Tanggal rilis

Deskripsi

Unduh

2019-04-30

  • Menambahkan operasi untuk model pesan berbasis antrian:

    • Membuat, memodifikasi, mengambil, dan menghapus antrian.

    • Mengirim, mengintip, menerima, dan menghapus pesan, serta mengubah timeout visibilitas pesan.

  • Menambahkan operasi untuk model pesan berbasis topik:

    • Membuat, memodifikasi, dan menghapus topik.

    • Membuat dan menghapus subscription.

    • Menerbitkan pesan ke topik.

Download SDK