Konsumen adalah aplikasi klien yang berlangganan ke topik dan memproses pesan dari ApsaraMQ for RocketMQ. Konsumen terhubung ke broker, mengambil pesan berdasarkan langganan mereka, lalu meneruskannya ke logika bisnis Anda untuk diproses.
Tiga faktor menentukan perilaku konsumen:
Consumer group: Setiap konsumen harus termasuk dalam consumer group. Grup tersebut menetapkan pengaturan perilaku bersama—seperti urutan pengiriman dan kebijakan retry—serta melacak progres konsumsi di antara anggotanya.
Jenis konsumen: Pilih antara push consumer (pengiriman yang dikendalikan broker) dan simple consumer (pull yang dikendalikan aplikasi). Lihat Jenis konsumen.
Pengaturan sisi klien: Jumlah thread, konkurensi, dan konfigurasi lokal lainnya mengontrol cara konsumen memproses pesan pada host aplikasi Anda.
Cara kerja
Diagram berikut menunjukkan posisi konsumen dalam model domain ApsaraMQ for RocketMQ.

Producer mengirim pesan ke broker ApsaraMQ for RocketMQ.
Broker menyimpan setiap pesan dalam antrian yang ditentukan oleh topik tujuan, mempertahankan urutan kedatangan.
Konsumen mengambil dan memproses pesan dari broker berdasarkan langganan mereka.
Konsumen dalam consumer group yang sama berbagi seluruh kumpulan pesan yang dikirimkan ke grup tersebut.
Atribut internal
- Nama consumer group tempat konsumen ini tergabung. Konsumen mewarisi urutan pengiriman dan kebijakan retry dari consumer group-nya.
- Consumer group merupakan sumber daya logis. Buat melalui Konsol atau API sebelum digunakan. Untuk aturan penamaan dan batasan lainnya, lihat Batas penggunaan.
- Identifier unik untuk setiap instans klien konsumen dalam kluster. SDK ApsaraMQ for RocketMQ menghasilkan nilai ini secara otomatis. Client ID muncul dalam log dan berguna untuk troubleshooting, tetapi tidak dapat diubah.
- Daftar topik dan ekspresi filter yang dilanggani konsumen. Tentukan langganan saat inisialisasi konsumen agar broker dapat memvalidasi izin dan ketersediaan topik di muka, bukan setelah aplikasi mulai berjalan.
- Jika tidak ada langganan yang ditentukan saat inisialisasi—atau jika topik yang dilanggani berubah saat runtime—ApsaraMQ for RocketMQ melakukan validasi dinamis, yang dapat menunda deteksi error.
- Antarmuka callback yang dipanggil broker untuk mengirimkan pesan ke push consumer. Konfigurasikan message listener pada klien konsumen.
- Simple consumer mengambil pesan secara eksplisit dan tidak menggunakan listener. Untuk informasi lebih lanjut, lihat Jenis konsumen.
Batasan perilaku
Semua konsumen dalam consumer group yang sama harus memiliki pengaturan identik untuk:
| Pengaturan | Deskripsi |
|---|---|
| Urutan pengiriman pesan | Menentukan apakah pesan dikirim secara berurutan atau konkuren |
| Kebijakan retry konsumsi | Menentukan cara pesan yang gagal diproses akan diulang |
Pengaturan yang tidak konsisten di antara konsumen dalam grup yang sama mengakibatkan perilaku pengiriman yang tidak dapat diprediksi. Cara penerapan pengaturan ini bergantung pada versi broker. Lihat bagian berikutnya untuk detailnya.
Kompatibilitas versi
| Perilaku | Broker 5.x | Broker 3.x / 4.x |
|---|---|---|
| Lokasi definisi urutan pengiriman dan kebijakan retry | Pada consumer group (sisi server) | Pada setiap klien konsumen (API sisi klien) |
| Tanggung jawab pengembang | Tidak perlu konfigurasi sisi klien—konsumen mewarisi pengaturan dari grup | Atur urutan pengiriman dan kebijakan retry pada setiap klien konsumen untuk memastikan konsistensi di seluruh grup |
Jika Anda menggunakan versi SDK lama untuk terhubung ke broker 5.x, konsumen tetap membaca urutan pengiriman dan kebijakan retry dari konfigurasi API sisi klien, bukan dari consumer group.
Praktik terbaik
Inisialisasi satu konsumen per grup per proses
Konsumen ApsaraMQ for RocketMQ menggunakan protokol non-blocking yang mendukung akses multi-threaded secara konkuren. Satu instans konsumen dapat menangani throughput tinggi. Dalam kebanyakan kasus, inisialisasi satu konsumen per consumer group dalam setiap proses. Membuat beberapa instans konsumen dengan konfigurasi yang sama dalam satu proses hanya membuang sumber daya tanpa meningkatkan performa.
Gunakan ulang konsumen alih-alih membuat dan menghapusnya berulang kali
Perlakukan instans konsumen seperti kolam koneksi database—buat sekali dan gunakan ulang sepanjang siklus hidup aplikasi. Membuat konsumen baru untuk setiap batch pesan lalu menghapusnya setelahnya menghasilkan koneksi singkat berlebihan pada broker, sehingga meningkatkan beban sistem secara tidak perlu.
Benar — buat sekali, konsumsi dalam loop, matikan saat keluar:
Consumer c = ConsumerBuilder.build();
for (int i = 0; i < n; i++) {
Message m = c.receive();
// proses pesan
}
c.shutdown();Salah — buat dan hapus di dalam loop:
for (int i = 0; i < n; i++) {
Consumer c = ConsumerBuilder.build();
Message m = c.receive();
// proses pesan
c.shutdown();
}Langkah selanjutnya
Consumer group: Pelajari cara consumer group mengelola pengaturan pengiriman bersama dan melacak progres konsumsi.
Jenis konsumen: Bandingkan push consumer dan simple consumer untuk menentukan mana yang sesuai dengan kasus penggunaan Anda.
Batas penggunaan: Periksa aturan penamaan, kuota, dan batasan lainnya untuk consumer group.