全部产品
Search
文档中心

Short Message Service:Demo konsumsi Lightweight Message Queue (sebelumnya MNS)

更新时间:Dec 20, 2025

Topik ini menyediakan contoh konsumsi pesan dalam berbagai bahasa pemrograman populer. Anda dapat mengunduh paket Software Development Kit (SDK) yang sesuai untuk menarik pesan dari antrian.

Panduan versi SDK

Alibaba Cloud Short Message Service menyediakan dua versi Software Development Kit (SDK): SDK V1.0 dan SDK V2.0. SDK V2.0 merupakan versi terbaru dan menyediakan fitur API yang setara dengan SDK V1.0. Dibandingkan dengan SDK V1.0, SDK V2.0 lebih andal, lebih mudah digunakan, serta mendukung lebih banyak bahasa pemrograman. SDK ini juga mengatasi masalah thread safety pada klien tunggal yang terdapat di SDK V1.0, sehingga memberikan pengalaman pengembang yang lebih baik.

Catatan

SDK V1.0 tidak lagi dipelihara. Kami menyarankan Anda menggunakan SDK V2.0. Jika Anda masih menggunakan SDK V1.0, Anda harus meng-upgrade ke SDK V2.0.

Alamat unduhan SDK

SDK International SMS mendukung berbagai bahasa pemrograman. Anda dapat menemukan metode instalasi SDK di OpenAPI Portal atau melihat kode sumber dan panduan instalasi di GitHub. Kami menyarankan Anda menginstal SDK menggunakan alat manajemen dependensi standar untuk bahasa pemrograman yang Anda gunakan.

Bahasa

Metode instalasi SDK

Alamat GitHub

Quick Start

Java

SDK for Java

java-dysmsapi-20180501

Gunakan Alibaba Cloud SDK for Java di IDE

Python

SDK for Python

python-dysmsapi-20180501

Gunakan Alibaba Cloud SDK for Python di IDE

PHP

SDK for PHP

php-dysmsapi-20180501

Gunakan Alibaba Cloud SDK for PHP di IDE

Go

SDK for Go

go-dysmsapi-20180501

Gunakan Alibaba Cloud SDK for Go di IDE

TypeScript

SDK for TypeScript

typescript-dysmsapi-20180501

Gunakan Alibaba Cloud SDK for Node.js di IDE

C++

SDK for Swift

cpp-dysmsapi-20180501

/

C#

SDK for C#

csharp-dysmsapi-20180501

Gunakan Alibaba Cloud .NET SDK di IDE

Swift

SDK for Swift

swift-dysmsapi-20180501

/

Contoh penerimaan pesan

Catatan

Sebelum memanggil API, Anda harus mengonfigurasi variabel lingkungan agar SDK dapat membaca kredensial akses Anda. Nama variabel lingkungan untuk ID AccessKey dan Rahasia AccessKey masing-masing adalah ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. Untuk informasi selengkapnya tentang konfigurasi tersebut, lihat Langkah-langkah mengonfigurasi variabel lingkungan.

Demo Java

package com.alicom.mns.sample;

import java.text.SimpleDateFormat;
import java.util.Date;

import com.alicom.mns.tools.inter.DefaultAlicomMessagePuller;
import com.alicom.mns.tools.inter.MessageListener;
import com.aliyun.mns.model.Message;

/**
 * Ini adalah DEMO untuk konsumsi pesan Antrian MNS SMS
 * MessageType: SmsReport
 */
public class ReceiveDemo {


    static class MyMessageListener implements MessageListener {
        @Override
        public boolean dealMessage(Message message) {

            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("waktu penerimaan 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 {
                //Silakan tambahkan kode Anda di sini

            } catch (Throwable e) {
                // Exception yang disebabkan oleh kode Anda sendiri. Pesan tidak akan dihapus dan dapat diambil kembali
                return false;
            }
            // Pesan akan dihapus karena kesalahan format
            return true;
        }

    }

    public static void main(String[] args) {

        DefaultAlicomMessagePuller puller = new DefaultAlicomMessagePuller();

        //Atur ukuran thread asinkron
        puller.setConsumeMinThreadSize(6);
        puller.setConsumeMaxThreadSize(16);
        puller.setThreadQueueSize(200);
        puller.setPullMsgThreadSize(1);
        //Hanya diaktifkan saat debugging, harus dinonaktifkan dalam status produksi
        puller.openDebugLog(false);

        String regionIdForPop = "ap-southeast-1";
        String endpointNameForPop = "ap-southeast-1";

        //Jika Anda mengirim permintaan SMS ke OpenAPI Wilayah Singapura (domain: dysmsapi.ap-southeast-1.aliyuncs.com)
        //Silakan gunakan
        String domainForPop = "dybaseapi.ap-southeast-1.aliyuncs.com";
        String mnsAccountEndpoint = "http://1493622401794734.mns.ap-southeast-1.aliyuncs.com";

        //Jika Anda mengirim permintaan SMS ke OpenAPI Wilayah Indonesia (Jakarta) (domain: dysmsapi.ap-southeast-5.aliyuncs.com)
        //Silakan gunakan
        //String domainForPop = "dybaseapi.ap-southeast-5.aliyuncs.com";
        //String mnsAccountEndpoint = "http://1493622401794734.mns.ap-southeast-5.aliyuncs.com";

        //Jika Anda mengirim permintaan SMS ke OpenAPI Wilayah Jerman (Frankfurt) (domain: dysmsapi.eu-central-1.aliyuncs.com)
        //String domainForPop = "dybaseapi.eu-central-1.aliyuncs.com";
        //String mnsAccountEndpoint = "http://1493622401794734.mns.eu-central-1.aliyuncs.com";

        //Jika Anda mengirim permintaan SMS ke OpenAPI Wilayah AS Timur (Virginia) (domain: dysmsapi.us-east-1.aliyuncs.com)
        //String domainForPop = "dybaseapi.us-east-1.aliyuncs.com";
        //String mnsAccountEndpoint = "http://1493622401794734.mns.us-east-1.aliyuncs.com";

        //AccessKey dan SecretKey dapat Anda peroleh dari Alibaba Cloud Console
        String accessKeyId = "";
        String accessKeySecret = "";

        //SmsReport
        String messageType = "SmsReport";

        //Nama Antrian dapat Anda peroleh dari Alibaba Cloud Sms Console
        //Pola: Alicom-Queue-{UID}-{messageType}
        String queueName = "";

        puller.startReceiveMsgForVPC(accessKeyId, accessKeySecret, messageType, queueName, regionIdForPop,
            endpointNameForPop, domainForPop, mnsAccountEndpoint, new MyMessageListener());

        //atau inisialisasi IAcsClient Anda sendiri (tanpa accessKeySecret)
        //puller.startReceiveMsg(acsClient, messageType, queueName, new MyMessageListener(), mnsAccountEndpoint);
    }

}

FAQ

Error "SSL: CERTIFICATE_VERIFY_FAILED" saat mengintegrasikan Python SDK di macOS

Mengapa exception "SSL: CERTIFICATE_VERIFY_FAILED" muncul saat mengintegrasikan Python SDK di macOS? Pesan error lengkapnya adalah `websocket closed due to [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)`.

Saat menghubungkan ke WebSocket, OpenSSL mungkin gagal mengautentikasi sertifikat server. Masalah ini biasanya terjadi karena sertifikat root yang diperlukan belum dikonfigurasi dengan benar di lingkungan Python Anda. Anda dapat menyelesaikan masalah ini secara manual dengan langkah-langkah berikut:

  1. Ekspor sertifikat sistem dan atur variabel lingkungan: Jalankan perintah berikut untuk mengekspor semua sertifikat dari sistem macOS ke sebuah file. Kemudian, atur path ke file tersebut sebagai path sertifikat default untuk Python dan library terkait.

    security find-certificate -a -p > ~/all_mac_certs.pem
    export SSL_CERT_FILE=~/all_mac_certs.pem
    export REQUESTS_CA_BUNDLE=~/all_mac_certs.pem
  2. Buat tautan simbolik untuk memperbaiki konfigurasi OpenSSL Python: Jika sertifikat tidak tersedia dalam konfigurasi OpenSSL Python, Anda dapat menjalankan perintah berikut untuk membuat tautan simbolik secara manual. Pastikan Anda mengganti path dalam perintah tersebut dengan path instalasi aktual versi Python lokal Anda.

    # 3.9 hanyalah contoh nomor versi. Sesuaikan path berdasarkan versi Python yang terinstal di mesin lokal Anda.
    ln -s /etc/ssl/* /Library/Frameworks/Python.framework/Versions/3.9/etc/openssl
  3. Mulai ulang terminal dan bersihkan cache: Setelah menyelesaikan langkah-langkah di atas, tutup dan buka kembali terminal agar variabel lingkungan diterapkan. Anda kemudian dapat membersihkan cache yang mungkin ada dan mencoba menghubungkan kembali ke WebSocket.

Langkah-langkah di atas dapat mengatasi masalah koneksi yang disebabkan oleh konfigurasi sertifikat yang salah. Jika masalah tetap berlanjut, periksa apakah konfigurasi sertifikat pada server tujuan sudah benar.