Tous les produits
Search
Centre de documentation

Simple Message Queue (formerly MNS):SDK Go

Dernière mise à jour :Aug 10, 2026

Cette rubrique présente les notes de version, les instructions d'utilisation et des exemples de code pour le SDK Go.

Utilisation

  1. Téléchargez et décompressez la dernière version du SDK Go, puis accédez au répertoire racine aliyun-mns-go-sdk.

  2. Accédez au répertoire example. Dans le fichier queue_example.go ou topic_example.go, remplacez l'espace réservé de l'endpoint par l'endpoint de votre instance. Définissez ensuite les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET.

    Vous trouverez votre endpoint dans la section Endpoint des pages Queue Details ou Topic Details de la console. L'endpoint de l'instance se trouve dans la section Endpoint de la page Queue Details de la console Simple Message Queue. Cette section propose des endpoints publics et internes.

Exemples de code

Modèle de file d'attente

Cet exemple crée une file d'attente, envoie un message, reçoit et supprime ce message, puis supprime la file d'attente.

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))
	}()
	// Replace with your own endpoint.
	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
	}
}

Modèle de rubrique

Cet exemple crée une file d'attente et une rubrique, s'abonne à la rubrique et publie un message.

package main
import (
	"fmt"
	"time"
	"github.com/aliyun/aliyun-mns-go-sdk"
	"github.com/gogap/logs"
)
func main() {
	// Replace with your own endpoint.
	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. create a queue for receiving pushed messages
	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. create the topic
	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. subscribe to topic, the endpoint is queue
	queueSub := ali_mns.MessageSubsribeRequest{
		Endpoint:            topic.GenerateQueueEndpoint(queueName),
		NotifyContentFormat: ali_mns.SIMPLIFIED,
	}
	// 4. subscribe to topic, the endpoint is 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. now publish message
	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. receive the message from queue
	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
}

Notes de version

Version 1.0.11

|
**Date de publication**
|
**Description**
|
**Téléchargement**
| | --- | --- | --- | |
20/03/2025
|
Rétrogradation de la dépendance `golang.org/x/net` de la version v0.36.0 à la version v0.33.0.
|
[Télécharger le SDK](https://github.com/aliyun/aliyun-mns-go-sdk/releases)
|











Version 1.0.10

|
**Date de publication**
|
**Description**
|
**Téléchargement**
| | --- | --- | --- | |
17/03/2025
|
Correction d'un problème entraînant l'échec de la vérification de la région lors de la création de ressources d'endpoint suffixées par `-control`.
|
[Télécharger le SDK](https://github.com/aliyun/aliyun-mns-go-sdk/releases)
|











Version 1.0.9

|
**Date de publication**
|
**Description**
|
**Téléchargement**
| | --- | --- | --- | |
11/03/2025
|
Correction du problème [issues#26](https://github.com/aliyun/aliyun-mns-go-sdk/issues/26), une erreur provoquée par l'absence du composant `StsTokenCredential` dans le package credential.
|
[Télécharger le SDK](https://github.com/aliyun/aliyun-mns-go-sdk/releases)
|











Version 1.0.8

|
**Date de publication**
|
**Description**
|
**Téléchargement**
| | --- | --- | --- | |
06/02/2025
|
Ajout de la prise en charge de la configuration du paramètre `logEnable` lors de la création d'une file d'attente et de la mise à jour des propriétés.
|
[Télécharger le SDK](https://github.com/aliyun/aliyun-mns-go-sdk/releases)
|











Version 1.0.7

Date de publication

Description

Téléchargement

23/01/2025

  • Ajout d'exemples d'encodage et de décodage Base64 dans queue_example.go.

  • Ajout de la prise en charge des identifiants dynamiques.

Télécharger le SDK

Version 1.0.6

Date de publication

Description

Téléchargement

13/11/2024

  • Ajout de topic_example.go, un exemple d'abonnement à un endpoint HTTP dans le modèle de messagerie basé sur les rubriques.

  • Ajout de http_authorization.go, un exemple de vérification de signature HTTP.

  • Suppression de la vérification de la taille du corps du message afin d'autoriser des messages plus volumineux.

Télécharger le SDK

Version 1.0.5

|
**Date de publication**
|
**Description**
|
**Téléchargement**
| | --- | --- | --- | |
19/08/2024
|
Mise à jour de la version minimale de Go déclarée dans le fichier `go.mod` pour corriger un échec de compilation.
|
[Télécharger le SDK](https://github.com/aliyun/aliyun-mns-go-sdk)
|











Version 1.0.4

Date de publication

Description

Téléchargement

17/07/2024

  • Ajout de la possibilité de personnaliser la valeur maxConnsPerHost sur le client.

  • Inclusion de la version du SDK et des informations sur le système d'exploitation dans les détails du client.

  • Ajout d'une méthode d'initialisation du client permettant de lire la configuration à partir des variables d'environnement.

Télécharger le SDK

Version 1.0.3

|
**Date de publication**
|
**Description**
|
**Téléchargement**
| | --- | --- | --- | |
21/05/2024
|
Ajout de la prise en charge des configurations personnalisées du transport HTTP.
|
[Télécharger le SDK](https://github.com/aliyun/aliyun-mns-go-sdk)
|











Version 1.0.2

|
**Date de publication**
|
**Description**
|
**Téléchargement**
| | --- | --- | --- | |
05/03/2021
|
Ajout de la prise en charge de l'API OpenService.
|
[Télécharger le SDK](https://github.com/aliyun/aliyun-mns-go-sdk)
|











Version 1.0.1

Date de publication

Description

Téléchargement

15/01/2021

  • Ajout de la prise en charge de la configuration des délais d'expiration.

  • Inclusion de l'ID de requête dans les réponses.

Télécharger le SDK

Version 1.0.0

Date de publication

Description

Téléchargement

30/04/2019

  • Ajout d'opérations pour le modèle de messagerie basé sur les files d'attente :

    • Création, modification, récupération et suppression de files d'attente.

    • Envoi, consultation, réception et suppression de messages, ainsi que modification du délai d'expiration de visibilité d'un message.

  • Ajout d'opérations pour le modèle de messagerie basé sur les rubriques :

    • Création, modification et suppression de rubriques.

    • Création et suppression d'abonnements.

    • Publication de messages sur une rubrique.

Télécharger le SDK