日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

隊列使用示例

本文介紹使用PHP SDK發送SMQ消息時的準備工作及示例代碼。

準備工作

  • 已安裝SDK

  • 已配置訪問域名及憑證

  • CreateQueueAndSendMessage.php的代碼最上方有一些設置,使用SDK時需按照注釋進行設置。

    // require替換為composer下載的vendor下的autoload文件。
    require_once __DIR__ . '/vendor/autoload.php';
    
    // 代碼里需要用的一些 PHP class。  
    use AliyunMNS\Client;
    use AliyunMNS\Requests\SendMessageRequest;
    use AliyunMNS\Requests\CreateQueueRequest;
    use AliyunMNS\Exception\MnsException;

消息體編碼選擇

當消息體無特殊字符時,建議您不使用Base64編碼。

  • 發送消息時使用message.setMessageBodyAsRawString方法設置消息體。

  • 接收消息時使用meesage.getMessageBodyAsRawString方法獲取消息體。

發送消息

完整示例代碼下載,請參見CreateQueueAndSendMessage

// 1.首先獲取Queue的實例。
// PHP SDK默認會對發送的消息做Base64 Encode,對接收到的消息做Base64 Decode。
// 如果不希望SDK做這樣的Base64操作,可以在getQueueRef的時候,傳入參數$base64=FALSE。即$queue = $this->client->getQueueRef($queueName, FALSE);
$queue = $this->client->getQueueRef($queueName);

$messageBody = "test";
// 2.生成一個SendMessageRequestItem對象。
// SendMessageRequestItem對象本身也包含了DelaySeconds和Priority屬性可以設置。
// 對于Message的屬性,請參見QueueMessage。
$bodyMD5 = md5(base64_encode($messageBody));
$request = new SendMessageRequestItem($messageBody);
try
{
        $res = $queue->sendMessage($request)
        // 3.消息發送成功。
        echo "MessageSent! \n";
}
catch (MnsException $e)
{
        // 4.可能因為網絡錯誤,或MessageBody過大等原因造成發送消息失敗,這里CatchException并做對應的處理。
        echo "SendMessage Failed: " . $e;
        return;
}

接收和刪除消息

完整示例代碼下載,請參見CreateQueueAndSendMessage

$receiptHandle = NULL;
try
{
        // 1.直接調用receiveMessage函數。
        // receiveMessage函數接受waitSeconds參數,無特殊情況建議設置為30。
        // waitSeconds非0表示這次receiveMessage是一次http long polling,如果queue內沒有message,那么這次request會在server端等到queue內有消息才返回。最長等待時間為waitSeconds的值,最大為30。
        $res = $queue->receiveMessage(30);
        echo "ReceiveMessage Succeed! \n";
        if (strtoupper($bodyMD5) == $res->getMessageBodyMD5())
        {
             echo "You got the message sent by yourself! \n";
        }
        // 2.獲取ReceiptHandle,這是一個有時效性的Handle,可以用來設置Message的各種屬性和刪除Message。更多信息,請參見QueueMessage。
        $receiptHandle = $res->getReceiptHandle();
}
catch (MnsException $e)
{
        // 3.和CreateQueue和SendMessage一樣,ReceiveMessage也有可能出錯,所以加上CatchException并做對應的處理。
        echo "ReceiveMessage Failed: " . $e;
        return;
}

// 這里是您處理消息的邏輯。Sample里就直接略過這一步。
// 如果這里發生了程序崩潰或卡住等異常情況,對應的Message會在VisibilityTimeout之后重新可見,從而可以被其他進程處理,避免消息丟失。

// 4.消息已經處理完成,從隊列里刪除這條消息。
try
{
        // 5.直接調用deleteMessage。
        $res = $queue->deleteMessage($receiptHandle);
        echo "DeleteMessage Succeed! \n";
}
catch (MnsException $e)
{
        // 6.這里CatchException并做異常處理。
        // 如果是receiptHandle已經過期,那么ErrorCode是MessageNotExist,表示通過這個receiptHandle已經找不到對應的消息。
        // 為了保證receiptHandle不過期,VisibilityTimeout的設置需要保證足夠消息處理完成。并且在消息處理過程中,也可以調用changeMessageVisibility這個函數來延長消息的VisibilityTimeout時間。
        echo "DeleteMessage Failed: " . $e;
        return;
}