Artikel ini menjelaskan cara menggunakan SDK untuk PHP untuk membuat antrian, mengirim pesan, menerima dan menghapus pesan, serta menghapus antrian.
Langkah 1: Siapkan lingkungan
- Unduh file CreateQueueAndSendMessage.php.
- Buka file CreateQueueAndSendMessage.php dan tentukan ID AccessKey, Rahasia AccessKey, serta Titik akhir di bagian akhir file.
- ID AccessKey dan Rahasia AccessKey
- Pasangan AccessKey yang digunakan untuk memanggil Operasi API di Alibaba Cloud.
- Jika Anda menggunakan akun Alibaba Cloud, buka halaman Manajemen AccessKey di Konsol Manajemen Alibaba Cloud untuk membuat dan melihat pasangan AccessKey Anda.
- Jika Anda seorang Pengguna Resource Access Management (RAM), masuk ke Konsol RAM untuk melihat pasangan AccessKey Anda.
- Titik akhir
- Titik akhir yang digunakan untuk mengakses Message Service (Simple Message Queue (sebelumnya MNS)). Untuk melihat titik akhir MNS, masuk ke Konsol MNS. Untuk informasi lebih lanjut, lihat Lihat Titik Akhir dari Sebuah Antrian.
- Titik akhir MNS bervariasi berdasarkan wilayah.
- ID AccessKey dan Rahasia AccessKey
- Gunakan kode berikut yang termasuk dalam file CreateQueueAndSendMessage.php untuk mengonfigurasi SDK:
// Sertakan file autoload SDK. require __DIR__ . '/vendor/autoload.php'; // Deklarasikan kelas PHP yang diperlukan. use AliyunMNS\Client; use AliyunMNS\Requests\SendMessageRequest; use AliyunMNS\Requests\CreateQueueRequest; use AliyunMNS\Exception\MnsException;
Langkah 2: Buat antrian
Jika tidak ada antrian yang tersedia, Anda harus membuat antrian. Nama default dari antrian baru adalah CreateQueueAndSendMessageExample. Anda juga dapat menentukan nama antrian lain.
// 1.Inisialisasi klien.
$this->client = new Client($this->endPoint, $this->accessId, $this->accessKey);
// 2.Buat permintaan untuk membuat antrian. Anda dapat menentukan parameter dari antrian.
// Untuk informasi lebih lanjut tentang parameter antrian, lihat Antrian.
$request = new CreateQueueRequest($queueName);
try
{
$res = $this->client->createQueue($request);
// 3.Antrian dibuat.
echo "AntrianDibuat! \n";
}
catch (MnsException $e)
{
// 4.Antrian mungkin gagal dibuat jika terjadi kesalahan jaringan atau nama antrian sudah ada. Anda dapat memanggil operasi CatchException untuk mengidentifikasi dan menyelesaikan kegagalan.
echo "BuatAntrianGagal: " . $e;
return;
} Langkah 3: Kirim pesan
Setelah antrian dibuat, kirim pesan ke antrian tersebut.
// 1.Ambil antrian.
// Secara default, SDK untuk PHP melakukan pengkodean Base64 untuk pesan yang dikirim dan melakukan dekode Base64 untuk pesan yang diterima.
// Jika Anda tidak ingin SDK melakukan operasi tersebut, Anda dapat mengatur parameter Base64 ke FALSE saat memanggil metode getQueueRef(): $queue = $this->client->getQueueRef($queueName, FALSE).
$queue = $this->client->getQueueRef($queueName);
$messageBody = "test";
// 2.Buat permintaan untuk mengirim pesan.
// Anda dapat menentukan parameter DelaySeconds dan Priority dari pesan.
// Untuk informasi lebih lanjut tentang parameter pesan, lihat QueueMessage.
$bodyMD5 = md5(base64_encode($messageBody));
$request = new SendMessageRequest($messageBody);
try
{
$res = $queue->sendMessage($request)
// 3.Pesan terkirim.
echo "PesanTerkirim! \n";
}
catch (MnsException $e)
{
// 4.Pesan mungkin gagal dikirim jika terjadi kesalahan jaringan atau pesan terlalu besar. Anda dapat mencari penyebabnya dan menyelesaikan masalah.
echo "KirimPesan Gagal: " . $e;
return;
} Langkah 4: Terima dan hapus pesan
Jika pesan telah dikirim, Anda dapat menerima pesan dari antrian.
NextVisibleTime adalah parameter penting dari pesan dalam Simple Message Queue (sebelumnya MNS). Untuk informasi lebih lanjut, lihat QueueMessage.
$receiptHandle = NULL;
try
{
// 1.Panggil fungsi receiveMessage().
// Kami merekomendasikan agar Anda mengatur parameter WaitSeconds ke 30 saat memanggil fungsi receiveMessage().
// Jika Anda mengatur parameter WaitSeconds ke nilai non-nol, permintaan penerimaan pesan adalah permintaan HTTP long polling. Respons hanya dikembalikan jika pesan dikirim ke antrian atau permintaan habis waktu. Nilai maksimum parameter WaitSeconds adalah 30.
$res = $queue->receiveMessage(30);
echo "TerimaPesan Berhasil! \n";
if (strtoupper($bodyMD5) == $res->getMessageBodyMD5())
{
echo "Anda mendapatkan pesan yang Anda kirim sendiri! \n";
}
// 2.Ambil nilai parameter ReceiptHandle. Tanda terima pesan memiliki periode validitas dan dapat digunakan untuk memodifikasi atau menghapus pesan. Untuk informasi lebih lanjut, lihat QueueMessage.
$receiptHandle = $res->getReceiptHandle();
}
catch (MnsException $e)
{
// 3.Pesan mungkin gagal diterima jika terjadi kesalahan. Anda dapat mencari penyebabnya dan menyelesaikan masalah.
echo "TerimaPesan Gagal: " . $e;
return;
}
// Tentukan logika Anda sendiri untuk memproses pesan berdasarkan persyaratan bisnis Anda.
// Parameter VisibilityTimeout menentukan periode ketika pesan tetap tidak aktif di antrian setelah dikonsumsi oleh klien. Setelah periode yang ditentukan, pesan menjadi aktif lagi dan dapat dikonsumsi oleh klien lain. Pesan tidak hilang jika program gagal atau macet.
// 4.Setelah pesan dikonsumsi, Anda dapat menghapus pesan dari antrian.
try
{
// 5.Panggil fungsi deleteMessage().
$res = $queue->deleteMessage($receiptHandle);
echo "HapusPesan Berhasil! \n";
}
catch (MnsException $e)
{
// 6.Jika terjadi kesalahan, Anda dapat memanggil operasi CatchException untuk mengidentifikasi dan menyelesaikan kegagalan.
// Jika tanda terima kedaluwarsa, kesalahan MessageNotExist dikembalikan. Kesalahan ini menunjukkan bahwa Anda tidak dapat menggunakan tanda terima untuk menemukan pesan yang sesuai.
// Untuk memastikan bahwa Anda dapat mengonsumsi pesan sebelum tanda terima kedaluwarsa, Anda harus mengatur parameter VisibilityTimeout ke nilai yang sesuai. Anda dapat memanggil fungsi changeMessageVisibility() untuk memodifikasi nilai parameter VisibilityTimeout.
echo "HapusPesan Gagal: " . $e;
return;
} Langkah 5: Hapus antrian
Anda dapat menggunakan kode contoh berikut untuk menghapus antrian:
try {
$this->client->deleteQueue($queueName);
echo "HapusAntrian Berhasil! \n";
} catch (MnsException $e) {
echo "HapusAntrian Gagal: " . $e;
return;
}