Manajemen memori RabbitMQ dengan Docker

Saya menggunakan gambar buruh pelabuhan manajemen RabbitMQ. Masalahnya adalah setelah waktu aktif sekitar 1 minggu, ruang disk dan memori hampir terkuras. Saya perlu mengakhiri lagi dan memulai ulang agar berfungsi normal, tetapi dengan melakukan itu, semua pesan yang ada di antrian akan hilang.

Perintah yang saya gunakan untuk memulai server Rabbitmq adalah : docker run --rm -it --hostname my-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

Saya menggunakan pesan yang persisten dan antrian yang tahan lama.

Jumlah antrian akan menjadi sekitar 70.

Koneksi per detik dapat bervariasi dari 5 hingga 100

Saya menggunakan modul npm amqplib untuk berinteraksi dengan RabbitMQ menggunakan Nodejs.

Apakah saya melakukan sesuatu yang salah? Atau haruskah saya mengonfigurasi di server mana pun secara langsung jika menggunakan gambar buruh pelabuhan? Apakah ada cara untuk menghapus pesan acknowledged saja?

Terima kasih sebelumnya.


person Pranesh A S    schedule 13.11.2020    source sumber


Jawaban (1)


inilah definisi daya tahan menurut dokumentasi resmi rabbitmq:

Daya tahan

Antrian bisa bertahan lama atau bersifat sementara. Metadata antrian tahan lama disimpan di disk, sedangkan metadata antrian sementara disimpan di memori bila memungkinkan. Perbedaan yang sama dibuat untuk pesan pada waktu penerbitan di beberapa protokol, misalnya. AMQP 0-9-1 dan MQTT.

Dalam lingkungan dan kasus penggunaan yang mengutamakan ketahanan, aplikasi harus menggunakan antrean yang tahan lama dan memastikan bahwa publikasi menandai pesan yang diterbitkan sebagai tetap ada.

jadi jika kalian menggunakan ketahanan pada bagian pesan berarti kalian menyimpannya ke penyimpanan. Rabbitmq hadir dengan fungsionalitas yang dapat Anda terima pesan Anda. jika Anda menerima pesan tersebut, pesan tersebut akan dihapus dari antrean. jadi Anda memiliki dua opsi di sini untuk ack:

  1. gunakan mode konfirmasi otomatis { noAck: true } :

    channel.consume(queue, function(msg) { // pesannya sendiri ada di sini! }, { noAck: true });

  2. petunjuk manual:

    channel.consume(queue, function(msg) { // pesan itu sendiri ada di sini! // Saya dapat memeriksa secara manual channel.ack(msg); }, { noAck: false });

jadi ada artikel untuk optimasi Rabbitmq: https://www.cloudamqp.com/blog/2018-01-08-part2-rabbitmq-best-practice-for-high-performa.html

person Babak Abadkheir    schedule 13.11.2020