Tous les produits
Search
Centre de documentation

Simple Message Queue (formerly MNS):Manage queues by using the C# SDK

Dernière mise à jour :Aug 10, 2026

Utilisez le SDK C# pour créer une file d'attente, envoyer un message, recevoir et supprimer un message, puis supprimer la file d'attente dans Simple Message Queue (anciennement MNS).

Avant de commencer

Avant de commencer, assurez-vous de disposer des éléments suivants :

Configurer le SDK

  1. Téléchargez la dernière version du SDK pour C# et décompressez le package.

  2. Ajoutez le dossier décompressé à Visual Studio en tant que solution. La solution contient quatre projets.

  3. Cliquez avec le bouton droit sur le projet AliyunSDK_MNS et sélectionnez Rebuild. Cela génère le fichier Aliyun.MNS.dll dans le répertoire bin.

    Remarque

    Ajoutez une référence à Aliyun.MNS.dll dans tout projet qui appelle le SDK SMQ.

  4. Ouvrez le fichier SyncTopicSample.cs dans le projet AliyunSDK_MNS_Sample.

  5. Définissez les propriétés suivantes dans Visual Studio :

    • Définissez AliyunSDK_MNS_Sample comme projet de démarrage.

    • Définissez SyncTopicSample comme objet de démarrage.

  6. En haut du fichier SyncTopicSample.cs, spécifiez votre AccessKey ID, votre AccessKey secret et votre endpoint.

Créer une file d'attente

Créez une file d'attente avec des paramètres personnalisés. Le nom par défaut de la file d'attente dans l'exemple de code est myqueue.

// Configure queue parameters. For a full list, see Queue in the API reference.
var createQueueRequest = new CreateQueueRequest
{
    QueueName = _queueName,
    Attributes =
    {
        VisibilityTimeout = 30,          // Seconds a received message stays invisible. Default: 30.
        MaximumMessageSize = 40960,      // Maximum message size in bytes.
        MessageRetentionPeriod = 345600, // Seconds a message is retained. Default: 345600 (4 days).
        PollingWaitSeconds = 30          // Long polling timeout in seconds. Maximum: 30.
    }
};

try
{
    var queue = client.CreateQueue(createQueueRequest);
    Console.WriteLine("Create queue successfully, queue name: {0}", queue.QueueName);
}
catch (MNSException me)
{
    // Common causes: network error, queue name already exists.
    Console.WriteLine("CreateQueue Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Create queue failed, exception info: " + ex.Message);
}

Pour créer une file d'attente avec les paramètres par défaut, appelez directement client.CreateQueue(_queueName).

Envoyer un message

Une fois la file d'attente créée, envoyez-y un message :

try
{
    // Get a reference to the queue.
    var nativeQueue = client.GetNativeQueue(_queueName);

    // Build a send request with a message body.
    var sendMessageRequest = new SendMessageRequest("Alibaba<MessageBody>Cloud");

    // Send the message.
    var sendMessageResponse = nativeQueue.SendMessage(sendMessageRequest);
    Console.WriteLine("Send message succeed");
}
catch (MNSException me)
{
    Console.WriteLine("SendMessage Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Send message failed, exception info: " + ex.Message);
}

Pour envoyer un message en texte brut sans paramètres supplémentaires, appelez nativeQueue.SendMessage("MessageBody").

Recevoir et supprimer un message

Recevoir un message

Appelez ReceiveMessage pour extraire un message de la file d'attente. Transmettez une valeur WaitSeconds pour activer l'interrogation longue (long polling). La requête reste en attente jusqu'à l'arrivée d'un message ou l'expiration du délai d'attente. Vous devez spécifier le paramètre NextVisibleTime dans SMQ. Pour plus d'informations sur NextVisibleTime et les autres attributs de message, consultez QueueMessage.

try
{
    // Long poll for up to 30 seconds.
    var receiveMessageResponse = nativeQueue.ReceiveMessage(30);

    // Save the receipt handle for later deletion.
    // The receipt handle is valid for the duration of VisibilityTimeout.
    _receiptHandle = message.ReceiptHandle;
}
catch (MNSException me)
{
    Console.WriteLine("ReceiveMessage Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("ReceiveMessage failed, exception info: " + ex.Message);
}

Interrogation longue : Lorsque WaitSeconds a une valeur non nulle (maximum 30), la requête attend qu'un message soit disponible ou que le délai d'attente expire. Cette approche réduit les réponses vides lors de l'interrogation et diminue les coûts.

Délai de visibilité : Après qu'un client a reçu un message, celui-ci passe à l'état Inactif pendant la durée définie par VisibilityTimeout. Durant cette période, aucun autre client ne peut recevoir le même message. À l'expiration du délai, le message revient à l'état Actif et devient disponible pour les autres consommateurs. Ce mécanisme évite la perte de messages si un consommateur se termine de manière inattendue.

Supprimer un message

Une fois le message traité, supprimez-le de la file d'attente à l'aide du handle de réception. Supprimez le message avant l'expiration du handle de réception ; sinon, le handle devient invalide.

try
{
    var deleteMessageResponse = nativeQueue.DeleteMessage(_receiptHandle);
}
catch (MNSException me)
{
    // A MessageNotExist error means the receipt handle has expired.
    // To avoid this, set VisibilityTimeout to a value that gives your
    // application enough time to process the message, or call
    // changeMessageVisibility() to extend it.
    Console.WriteLine("DeleteMessage Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Delete message failed, exception info: " + ex.Message);
}
Conseil : Si le traitement du message prend plus de temps que le délai de visibilité par défaut, appelez changeMessageVisibility() pour prolonger le délai avant l'expiration du handle de réception.

Supprimer une file d'attente

Lorsqu'une file d'attente n'est plus nécessaire, supprimez-la pour libérer des ressources :

try
{
    var deleteQueueResponse = client.DeleteQueue(deleteQueueRequest);
}
catch (MNSException me)
{
    Console.WriteLine("DeleteQueue Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Delete queue failed, exception info: " + ex.Message);
}