Todos os produtos
Search
Central de documentação

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

Última atualização: Jun 27, 2026

Utilize o SDK para C# a fim de criar uma fila, enviar e receber mensagens, além de excluir filas e mensagens no Simple Message Queue (anteriormente MNS).

Antes de começar

Antes de iniciar, verifique se você possui:

Configure o SDK

  1. Baixe a versão mais recente do SDK para C# e descompacte o pacote.

  2. Adicione a pasta descompactada ao Visual Studio como uma solução. A solução contém quatro projetos.

  3. Clique com o botão direito no projeto AliyunSDK_MNS e selecione Rebuild. Essa ação gera o arquivo Aliyun.MNS.dll no diretório bin.

    Nota

    Adicione uma referência ao Aliyun.MNS.dll em qualquer projeto que invoque o SDK do SMQ.

  4. Abra o arquivo SyncTopicSample.cs no projeto AliyunSDK_MNS_Sample.

  5. Defina as seguintes propriedades no Visual Studio:

    • Configure AliyunSDK_MNS_Sample como o projeto de inicialização.

    • Defina SyncTopicSample como o objeto de inicialização.

  6. No início do arquivo SyncTopicSample.cs, especifique seu AccessKey ID, AccessKey secret e endpoint.

Crie uma fila

Crie uma fila com parâmetros personalizados. O nome padrão da fila no código de exemplo é 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);
}

Para criar uma fila com parâmetros padrão, chame diretamente client.CreateQueue(_queueName).

Envie uma mensagem

Após criar a fila, envie uma mensagem para ela:

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);
}

Para enviar uma mensagem em texto simples sem parâmetros adicionais, utilize nativeQueue.SendMessage("MessageBody").

Receba e exclua uma mensagem

Receba uma mensagem

Invoque ReceiveMessage para obter uma mensagem da fila. Passe um valor para WaitSeconds a fim de ativar o long polling. A solicitação permanece pendente até que uma mensagem chegue ou o tempo limite expire. É obrigatório especificar o parâmetro NextVisibleTime no SMQ. Para mais informações sobre NextVisibleTime e outros atributos de mensagem, consulte 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);
}

Long polling: Quando WaitSeconds possui um valor diferente de zero (máximo de 30), a requisição aguarda até que uma mensagem esteja disponível ou o tempo limite seja atingido. Isso reduz as consultas com respostas vazias e diminui os custos.

Visibility timeout: Depois que um cliente recebe uma mensagem, ela entra no estado Inativo durante o período definido por VisibilityTimeout. Nesse intervalo, nenhum outro cliente consegue receber a mesma mensagem. Ao expirar o tempo limite, a mensagem retorna ao estado Ativo e fica disponível para outros consumidores. Esse mecanismo evita a perda de mensagens caso um consumidor encerre inesperadamente.

Exclua uma mensagem

Após processar uma mensagem, remova-a da fila utilizando o receipt handle. Exclua a mensagem antes que o receipt handle expire; caso contrário, ele se tornará inválido.

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);
}
Dica: Se o processamento da mensagem demorar mais que o tempo limite de visibilidade padrão, chame changeMessageVisibility() para estender o tempo limite antes que o receipt handle expire.

Exclua uma fila

Quando uma fila não for mais necessária, exclua-a para liberar recursos:

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);
}