Gunakan Simple Message Queue (formerly MNS) untuk menerima tanda terima pengiriman.
Prasyarat
Akun Alibaba Cloud dan pasangan AccessKey telah dibuat. Untuk informasi selengkapnya, lihat Buat pasangan Kunci Akses.
Antrian MNS memiliki akses ke nama domain berikut: dybaseapi.ap-southeast-1.aliyuncs.com dan 1493622401794734.mns.ap-southeast-1.aliyuncs.com.
Idempotensi tanda terima pengiriman tidak dapat dijamin. Kami menyarankan Anda mengambil langkah-langkah yang sesuai untuk memastikan kebenaran dan konsistensi data setelah menerima tanda terima pengiriman.
Parameter permintaan
Parameter | Type | Contoh | Deskripsi |
To | String | 8521234**** | Nomor ponsel yang menerima tanda terima pengiriman. |
Status | String | 1 | Status pesan. Nilai yang valid:
|
MessageId | String | 123456789**** | ID tanda terima pengiriman. |
SmsSize | String | 1 | Jumlah pesan. Pesan panjang akan dipisah menjadi beberapa pesan. |
SendDate | String | Thu, 25 Nov 2021 10:27:00 +0800 | Waktu saat pesan dikirim ke penyedia layanan. |
ReceiveDate | String | Thu, 25 Nov 2021 10:27:33 +0800 | Waktu saat tanda terima pengiriman diterima dari penyedia layanan. |
ErrorCode | String | success | Kode kesalahan. |
ErrorDescription | String | success | Pesan kesalahan. |
Contoh
{
"To" : "8521234****",
"SendDate" : "Thu, 25 Nov 2021 10:27:00 +0800",
"ReceiveDate" : "Thu, 25 Nov 2021 10:27:33 +0800",
"Status" : "1",
"SmsSize":"1",
"ErrorCode" : "success",
"ErrorDescription" : "success",
"MessageId" : "123456789****"
}Unduh demo
Lihat demo konsumen Simple Message Queue dan unduh demo serta SDK untuk bahasa pemrograman pilihan Anda. Langkah-langkah berikut menggunakan Java sebagai contoh.
Setelah mengunduh demo, beberapa file JAR berada di direktori
lib. Anda perlu menambahkannya sebagai library dengan mengklik kanan file tersebut dan memilih Add as Library, seperti yang ditunjukkan pada gambar di bawah.Anda dapat menemukan dependensi Maven di file
pom.xmluntuk menginstal Alibaba Cloud SDK untuk Java.

Konfigurasi parameter
Anda harus mengonfigurasi parameter berikut sebelum menggunakan kode contoh.
Konfigurasikan pasangan AccessKey
Kode contoh
Konten tanda terima pengiriman yang Anda terima diproses oleh metode dealMessage. Anda dapat menulis logika bisnis untuk menangani pesan-pesan ini di dalam metode tersebut.
// Parse isi pesan sesuai format spesifik dalam dokumentasi
String arg = (String) contentMap.get("arg");
// Tambahkan logika bisnis Anda di siniarg merepresentasikan parameter dari isi pesan callback. Nilainya mencakup: To, Status, MessageId, SmsSize, SendDate, ReceiveDate, ErrorCode, ErrorDescription.
package com.alicom.mns.sample;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.alicom.mns.tools.DefaultAlicomMessagePuller;
import com.alicom.mns.tools.MessageListener;
import com.aliyun.mns.model.Message;
import com.google.gson.Gson;
/**
* Ini hanya untuk menerima pesan dari layanan Alibaba Cloud Communications dan tidak dapat digunakan untuk layanan lain
*/
public class ReceiveDemo {
private static Log logger=LogFactory.getLog(ReceiveDemo.class);
static class MyMessageListener implements MessageListener{
private Gson gson=new Gson();
@Override
public boolean dealMessage(Message message) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Nilai kunci dari pesan
System.out.println("waktu penerima pesan dari mns:" + format.format(new Date()));
System.out.println("handle pesan: " + message.getReceiptHandle());
System.out.println("isi pesan: " + message.getMessageBodyAsString());
System.out.println("ID pesan: " + message.getMessageId());
System.out.println("jumlah dequeue pesan:" + message.getDequeueCount());
System.out.println("Thread:" + Thread.currentThread().getName());
try{
Map<String,Object> contentMap=gson.fromJson(message.getMessageBodyAsString(), HashMap.class);
// Parse isi pesan sesuai format spesifik dalam dokumentasi
String arg = (String) contentMap.get("arg");
// Tambahkan logika bisnis Anda di sini
}catch(com.google.gson.JsonSyntaxException e){
logger.error("error_json_format:"+message.getMessageBodyAsString(),e);
// Secara teori, kesalahan format seharusnya tidak terjadi. Jika Anda menemukan pesan yang rusak, hapus agar tidak dikirim ulang dan menyebabkan kesalahan berulang.
return true;
} catch (Throwable e) {
// Jika pengecualian disebabkan oleh kode Anda sendiri, Anda harus mengembalikan false. Hal ini mencegah pesan dihapus dan memungkinkannya dikirim ulang sesuai kebijakan retry.
return false;
}
// Jika pesan diproses berhasil, kembalikan true. SDK kemudian akan memanggil metode delete MNS untuk menghapus pesan dari antrian.
return true;
}
}
public static void main(String[] args) throws Exception, ParseException {
DefaultAlicomMessagePuller puller=new DefaultAlicomMessagePuller();
// Atur ukuran kolam thread async, antrian tugas, dan waktu tidur thread saat tidak ada data.
puller.setConsumeMinThreadSize(6);
puller.setConsumeMaxThreadSize(16);
puller.setThreadQueueSize(200);
puller.setPullMsgThreadSize(1);
// Aktifkan ini untuk debugging sisi server. Nonaktifkan selama operasi normal karena berdampak pada performa.
puller.openDebugLog(false);
// Dapatkan ID AccessKey dan Secret AccessKey dari variabel lingkungan lokal.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
/*
* Ganti messageType dan queueName dengan jenis pesan dan nama antrian yang sesuai.
* Jenis pesan callback yang didukung:
* 1: SmsReport: tanda terima pengiriman SMS
* 2: SmsUp: pesan Mobile Originated
* 3: GlobeSmsReport: tanda terima pengiriman SMS Internasional
*/
String messageType="<MESSAGE_TYPE>"; // Ganti ini dengan jenis pesan. SmsReport didukung.
String queueName="<QUEUE_NAME>"; // Setelah mengaktifkan fitur di konsol, Anda dapat menemukan queueName yang sesuai di halaman tersebut. Contoh: Alicom-Queue-******-SmsReport.
puller.startReceiveMsg(accessKeyId,accessKeySecret,messageType,queueName,new MyMessageListener());
}
}Output setelah menjalankan demo:

