全部产品
Search
文档中心

Simple Message Queue (formerly MNS):SDK untuk Go

更新时间:Jun 29, 2025

Topik ini menjelaskan versi, catatan penggunaan, serta menyediakan contoh kode untuk SDK Go.

Petunjuk

  1. Setelah mengunduh versi terbaru SDK untuk Go, ekstrak paket tersebut dan masuk ke direktori aliyun-mns-go-sdk.

  2. Masuk ke direktori example, lalu ubah titik akhir yang digunakan untuk mengakses instance SMQ di file queue_example.go atau topic_example.go. Konfigurasikan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET dalam variabel lingkungan.

    Untuk informasi lebih lanjut tentang titik akhir, lihat Endpoint pada tab Informasi Dasar di halaman Queue Details/Topic Details.image

Contoh kode

Model perpesanan berbasis antrian

Berikut adalah contoh kode untuk membuat antrian, mengirim pesan, menerima pesan, menghapus pesan, dan menghapus antrian.

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 titik akhir Anda sendiri.
	endpoint := "http://xxx.mns.cn-hangzhou.aliyuncs.com"
	client := ali_mns.NewClient(endpoint)
	msg := ali_mns.MessageSendRequest{
		MessageBody:  "halo <\"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("ubah visibilitas: ", resp.ReceiptHandle)
					if ret, e := queue.ChangeMessageVisibility(resp.ReceiptHandle, 5); e != nil {
						fmt.Println(e)
					} else {
						logs.Pretty("visibilitas diubah", ret)
						logs.Debug("hapus sekarang: ", 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 perpesanan berbasis topik

Berikut adalah contoh kode untuk membuat antrian, membuat topik, berlangganan topik, dan mempublikasikan pesan.

package main

import (
	"fmt"
	"time"

	"github.com/aliyun/aliyun-mns-go-sdk"
	"github.com/gogap/logs"
)

func main() {
	// Ganti dengan titik akhir 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 topik, titik akhirnya adalah antrian
	queueSub := ali_mns.MessageSubsribeRequest{
		Endpoint:            topic.GenerateQueueEndpoint(queueName),
		NotifyContentFormat: ali_mns.SIMPLIFIED,
	}

	// 4. berlangganan topik, titik akhirnya 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 publikasikan pesan
	msg := ali_mns.MessagePublishRequest{
		MessageBody: "halo topik <\"aliyun-mns-go-sdk\">",
		MessageAttributes: &ali_mns.MessageAttributes{
			MailAttributes: &ali_mns.MailAttributes{
				Subject:     "Karakter Cina AAA",
				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("ubah visibilitas: ", resp.ReceiptHandle)
				if ret, e := queue.ChangeMessageVisibility(resp.ReceiptHandle, 5); e != nil {
					fmt.Println(e)
				} else {
					logs.Pretty("visibilitas diubah", ret)
					fmt.Println("hapus sekarang: ", 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

URL Unduhan

2025-03-20

golang.org/x/net dikembalikan dari v0.36.0 ke v0.33.0.

Unduh SDK

Versi 1.0.10

Tanggal rilis

Deskripsi

URL Unduhan

2025-03-17

Masalah berikut telah diperbaiki: Pemeriksaan informasi wilayah gagal setelah Anda membuat sumber daya titik akhir dengan akhiran -control.

Unduh SDK

Versi 1.0.9

Tanggal rilis

Deskripsi

URL Unduhan

2025-03-11

Kesalahan versi issues#26 telah diperbaiki. Kesalahan ini disebabkan oleh StsTokenCredential yang tidak tersedia dalam file rahasia.

Unduh SDK

Versi 1.0.8

Tanggal rilis

Deskripsi

URL Unduhan

2025-02-06

Mendukung konfigurasi parameter logEnable saat Anda membuat antrian atau mengonfigurasi properti.

Unduh SDK

Versi 1.0.7

Tanggal rilis

Deskripsi

URL Unduhan

2025-01-23

  • Enkode dan dekode Base64 ditambahkan di queue_example.go.

  • Kredensial dapat diperoleh secara dinamis.

Unduh SDK

Versi 1.0.6

Tanggal rilis

Deskripsi

URL Unduhan

2024-11-13

  • topic_example.go untuk langganan titik akhir HTTP ditambahkan dalam model perpesanan berbasis topik.

  • http_authorization.go untuk verifikasi tanda tangan HTTP ditambahkan dalam model perpesanan berbasis topik.

  • Batas ukuran badan pesan dihapus untuk memungkinkan pengguna mentransmisikan pesan yang lebih besar.

Unduh SDK

Versi 1.0.5

Tanggal rilis

Deskripsi

URL Unduhan

2024-08-19

Versi Go paling awal yang dinyatakan dalam file go.mod diperbarui untuk menghindari kegagalan pembuatan.

Unduh SDK

Versi 1.0.4

Tanggal rilis

Deskripsi

URL Unduhan

2024-07-17

  • Anda diizinkan mengonfigurasi nilai maxConnsPerHost.

  • Nomor versi dan informasi sistem operasi ditambahkan ke informasi klien.

  • Metode baru untuk menginisialisasi klien disediakan. Anda dapat memperoleh informasi konfigurasi dari variabel lingkungan.

Unduh SDK

Versi 1.0.3

Tanggal rilis

Deskripsi

URL Unduhan

2024-05-21

Anda diizinkan mengatur atribut transport dari klien HTTP.

Unduh SDK

Versi 1.0.2

Tanggal rilis

Deskripsi

URL Unduhan

2021-03-05

Operasi OpenService disediakan.

Unduh SDK

Versi 1.0.1

Tanggal rilis

Deskripsi

URL Unduhan

2021-01-15

  • Pengaturan batas waktu didukung.

  • ID permintaan disediakan dalam respons.

Unduh SDK

Versi 1.0.0

Tanggal rilis

Deskripsi

URL Unduhan

2019-04-30

  • Operasi manajemen antrian berikut didukung:

    • Buat, modifikasi, kueri, dan hapus antrian.

    • Kirim, lihat, terima, dan hapus pesan, serta ubah nilai parameter NextVisibleTime.

  • Operasi manajemen topik berikut didukung:

    • Buat, modifikasi, dan hapus topik.

    • Buat dan hapus langganan.

    • Kirim pesan.

Unduh SDK