All Products
Search
Document Center

ApsaraMQ for RabbitMQ:Koneksi dan channel

Last Updated:Jul 04, 2026

Koneksi adalah tautan TCP fisik antara aplikasi Anda dan ApsaraMQ for RabbitMQ. Channel adalah koneksi virtual ringan yang dimultipleks di atas tautan TCP tersebut. Semua operasi Advanced Message Queuing Protocol (AMQP)—seperti mendeklarasikan antrian, memublikasikan pesan, dan mengonsumsi pesan—terjadi pada channel, bukan langsung pada koneksi.

Koneksi

Koneksi menangani tugas jaringan tingkat dasar seperti resolusi alamat IP, handshake TCP, negosiasi protokol AMQP, otentikasi, dan routing. Membuat koneksi memerlukan sekitar 15 paket TCP. Karena overhead ini, pembuatan koneksi mahal dan sebaiknya bersifat jangka panjang.

Sejumlah besar koneksi singkat mengonsumsi sumber daya jaringan dan server secara signifikan. Pada laju tinggi, pembuatan koneksi yang terlalu sering dapat memicu perlindungan SYN flood, menyebabkan instans ApsaraMQ for RabbitMQ berhenti merespons.

dg_connection

Channel

Channel adalah koneksi virtual yang dibangun di atas koneksi TCP fisik. Setiap koneksi dapat membawa beberapa channel. Saat koneksi ditutup, semua channel-nya juga ikut tertutup.

Untuk menghubungkan banyak aplikasi ke ApsaraMQ for RabbitMQ guna mengirim dan menerima pesan, buat jumlah koneksi yang wajar dan gunakan kembali beberapa channel dalam setiap koneksi. Pendekatan ini mengurangi penggunaan sumber daya sistem dibandingkan dengan membuka koneksi TCP baru untuk setiap operasi.

dg_channel

Catatan penggunaan

Gunakan koneksi persisten

Buka koneksi saat startup aplikasi dan pertahankan selama seluruh siklus hidup aplikasi. Jangan membuka dan menutup koneksi untuk setiap operasi publikasi atau konsumsi.

Jika beban kerja Anda memerlukan pembuatan channel yang sering, gunakan kembali satu set koneksi yang stabil dan buat beberapa channel di dalamnya. Untuk batasan laju pembukaan koneksi dan channel, lihat Limits.

Pisahkan koneksi produsen dan konsumen

Gunakan minimal satu koneksi untuk memproduksi pesan dan koneksi terpisah untuk mengonsumsi. ApsaraMQ for RabbitMQ menerapkan flow control (back pressure) pada koneksi yang mempublikasikan lebih cepat daripada kemampuan instans memprosesnya. Jika produsen dan konsumen berbagi koneksi yang sama, flow control pada sisi publikasi dapat menunda acknowledgment dari konsumen, sehingga menurunkan throughput konsumsi.

Gunakan satu channel per thread

Beberapa thread dapat berbagi satu koneksi. Namun, channel tidak aman untuk thread (thread-safe) di sebagian besar library client. Berikan setiap thread channel-nya sendiri; jangan berbagi channel lintas thread.

// Anti-pattern: berbagi channel lintas thread
Channel shared = connection.createChannel(); // Tidak thread-safe

// Direkomendasikan: satu channel per thread
ExecutorService executor = Executors.newFixedThreadPool(4);
for (int i = 0; i < 4; i++) {
    executor.submit(() -> {
        Channel ch = connection.createChannel();
        // Gunakan ch untuk operasi publikasi/konsumsi thread ini
    });
}

Saat beberapa proses berbagi satu koneksi, hindari membuka dan menutupnya secara terlalu sering. Jika tidak, error ChannelNotFind dapat terjadi.

Cegah consumption skew

Saat hanya beberapa koneksi yang menangani volume pesan besar, distribusi konsumsi bisa menjadi tidak merata di antara konsumen. Untuk mencegah hal ini:

  • Tingkatkan jumlah koneksi per konsumen atau tambahkan lebih banyak konsumen.

  • Pastikan setiap konsumen membuat jumlah koneksi yang sama.

  • Pertahankan minimal total 30 koneksi konsumen sebagai panduan.

Hindari pembuatan dan penutupan channel yang terlalu sering

Jangan terlalu sering membuat dan menutup channel dalam satu koneksi. Pastikan jumlah total TPS channelOpen dan channelClose tetap di bawah 1.000. Melebihi ambang batas ini akan menyebabkan beban berlebih pada broker.

Referensi cepat

PanduanDetail
Siklus hidup koneksiPersisten. Buka saat startup, tutup saat shutdown.
Siklus hidup channelBuka per thread atau per batch operasi. Tutup saat tidak diperlukan lagi.
Produsen vs. konsumenGunakan koneksi terpisah untuk mengisolasi flow control.
Keamanan threadBoleh berbagi koneksi lintas thread. Jangan berbagi channel.
Koneksi konsumen minimumTotal minimal 30+ untuk menghindari consumption skew.
Batas lajuLihat Limits.