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

隊(duì)列使用示例

更新時(shí)間:

本文介紹使用PHP SDK發(fā)送SMQ消息時(shí)的準(zhǔn)備工作及示例代碼。

準(zhǔn)備工作

  • 已安裝SDK

  • 已配置訪問域名及憑證

  • CreateQueueAndSendMessage.php的代碼最上方有一些設(shè)置,使用SDK時(shí)需按照注釋進(jìn)行設(shè)置。

    // 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;

消息體編碼選擇

當(dāng)消息體無特殊字符時(shí),建議您不使用Base64編碼。

  • 發(fā)送消息時(shí)使用message.setMessageBodyAsRawString方法設(shè)置消息體。

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

發(fā)送消息

完整示例代碼下載,請(qǐng)參見CreateQueueAndSendMessage。

// 1.首先獲取Queue的實(shí)例。
// PHP SDK默認(rèn)會(huì)對(duì)發(fā)送的消息做Base64 Encode,對(duì)接收到的消息做Base64 Decode。
// 如果不希望SDK做這樣的Base64操作,可以在getQueueRef的時(shí)候,傳入?yún)?shù)$base64=FALSE。即$queue = $this->client->getQueueRef($queueName, FALSE);
$queue = $this->client->getQueueRef($queueName);

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

接收和刪除消息

完整示例代碼下載,請(qǐng)參見CreateQueueAndSendMessage

$receiptHandle = NULL;
try
{
        // 1.直接調(diào)用receiveMessage函數(shù)。
        // receiveMessage函數(shù)接受waitSeconds參數(shù),無特殊情況建議設(shè)置為30。
        // waitSeconds非0表示這次receiveMessage是一次http long polling,如果queue內(nèi)沒有message,那么這次request會(huì)在server端等到queue內(nèi)有消息才返回。最長等待時(shí)間為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,這是一個(gè)有時(shí)效性的Handle,可以用來設(shè)置Message的各種屬性和刪除Message。更多信息,請(qǐng)參見QueueMessage。
        $receiptHandle = $res->getReceiptHandle();
}
catch (MnsException $e)
{
        // 3.和CreateQueue和SendMessage一樣,ReceiveMessage也有可能出錯(cuò),所以加上CatchException并做對(duì)應(yīng)的處理。
        echo "ReceiveMessage Failed: " . $e;
        return;
}

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

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