Corak Pengguna Bersaing
Laksanakan corak pengguna bersaing untuk membolehkan beberapa pengguna memproses mesej daripada satu baris gilir. Tingkatkan kapasiti pemprosesan dengan menambah lebih banyak pengguna.
Corak Pengguna Bersaing ialah pelajaran Pemesejan RabbitMQ & Sistem Tak Segerak percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pemesejan RabbitMQ & Sistem Tak Segerak, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pemesejan RabbitMQ & Sistem Tak Segerak merangkumi sejumlah 4 pelajaran.
Penskalaan dengan Pengguna Bersaing
Selamat datang! Dalam sistem teragih, anda sering perlu memproses banyak tugas dengan cekap. ialah cara yang berkesan untuk mencapai perkara ini.
Corak ini membolehkan anda meningkatkan kapasiti pemprosesan mesej dengan hanya menambah lebih banyak pekerja.
Cara Pengguna Bersaing Berfungsi
Bayangkan satu baris gilir tugas. Daripada seorang pekerja mengambil semua tugas, beberapa pekerja (pengguna) mendengar baris gilir yang sama.
- Setiap mesej dihantar kepada hanya seorang daripada pengguna yang bersaing.
- Pengguna "bersaing" untuk menerima mesej seterusnya yang tersedia.
- Ini mengagihkan beban kerja secara automatik.
Kelebihan Utama Corak Ini
Corak Pengguna Bersaing menawarkan beberapa kelebihan:
- Kebolehskalaan: Tingkatkan kuasa pemprosesan dengan mudah dengan menambah lebih banyak tika pengguna.
- Kebolehpercayaan: Jika seorang pengguna gagal, pengguna lain boleh mengambil alih bahagian mesejnya.
- Pengimbangan Beban: Mesej diagihkan antara pengguna yang tersedia untuk mengimbangi beban kerja.
- Pemisahan Gandingan: Pengeluar tidak perlu mengetahui bilangan pengguna atau lokasi mereka.
Pengeluar: Menghantar Tugas
Mari sediakan pengeluar asas yang menghantar mesej (tugas) ke baris gilir bernama task_queue. Setiap mesej akan berupa rentetan ringkas.
Jalankan kod ini untuk menghantar beberapa mesej:
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class TaskProducer {
private final static String QUEUE_NAME = "task_queue";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost"); // Assuming RabbitMQ is local
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
// Declare a durable queue
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
for (int i = 0; i < 10; i++) {
String message = "Task " + (i + 1);
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
System.out.println(" [x] Sent '" + message + "'");
Thread.sleep(100); // Small delay to visualize
}
}
}
}Pengguna 1: Memproses Tugas
Sekarang, mari cipta pengguna pertama kita. Pengguna ini akan bersambung ke task_queue dan mula memproses mesej. Setiap mesej akan diakui selepas kerja disimulasikan.
Jalankan pengguna ini dalam terminal:
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
public class TaskConsumer {
private final static String QUEUE_NAME = "task_queue";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
System.out.println(" [*] Consumer 1 waiting for messages.");
// Basic QoS: Prefetch 1 message at a time to ensure fair dispatch
channel.basicQos(1);
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [C1] Received '" + message + "'");
try {
Thread.sleep(1000); // Simulate work
} finally {
System.out.println(" [C1] Done '" + message + "'");
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}
};
channel.basicConsume(QUEUE_NAME, false, deliverCallback, consumerTag -> {});
}
}Menjalankan Berbilang Pengguna
Untuk benar-benar melihat corak pengguna bersaing beraksi, buka tetingkap terminal baharu dan jalankan kod TaskConsumer yang sama tepat sekali lagi.
Kini anda akan mempunyai dua tika pengguna yang mendengar task_queue. Jalankan kod pengeluar (daripada Adegan 4) sekali lagi. Perhatikan bagaimana mesej kini diagihkan antara kedua-dua tika pengguna, menunjukkan cara mereka bersaing untuk mendapatkan mesej dan berkongsi beban kerja!
Logik Pengagihan RabbitMQ
Secara lalai, RabbitMQ menggunakan mekanisme pengagihan round-robin apabila beberapa pengguna bersambung ke baris gilir yang sama. Ini bermaksud mesej dihantar kepada pengguna secara berturutan.
- Pengguna 1 menerima mesej 1.
- Pengguna 2 menerima mesej 2.
- Pengguna 1 menerima mesej 3, dan seterusnya.
Tetapan basicQos(1) dalam kod pengguna kita amat penting di sini. Tetapan ini memberitahu RabbitMQ supaya tidak menghantar lebih daripada satu mesej yang belum diakui kepada pengguna pada satu-satu masa, sekali gus memastikan pengagihan yang adil walaupun pengguna memproses pada kelajuan yang berbeza.
Kes Penggunaan Lazim
Corak Pengguna Bersaing sesuai untuk senario seperti:
- Pemprosesan imej: Beberapa pekerja mengubah saiz imej daripada baris gilir.
- Penghantaran e-mel: Menghantar e-mel secara pukal tanpa membebankan satu perkhidmatan.
- Pemprosesan log: Menganalisis jumlah log yang besar secara selari.
- Kerja latar belakang: Sebarang tugas yang boleh diproses secara berasingan oleh beberapa pekerja.
Pertimbangan Penting
Apabila menggunakan pengguna bersaing, ambil perhatian terhadap perkara berikut:
- Susunan Mesej: Jika susunan mesej yang ketat amat penting, corak ini mungkin tidak sesuai secara langsung kerana mesej boleh diproses di luar susunan oleh pengguna yang berbeza.
- Idempoten: Sebaik-baiknya, pengguna hendaklah idempoten. Ini bermaksud pemprosesan mesej yang sama beberapa kali harus menghasilkan kesan yang sama seperti memprosesnya sekali. Perkara ini penting untuk toleransi kesalahan dan percubaan semula.
Kuiz Pengguna Bersaing
Uji pemahaman anda tentang corak Pengguna Bersaing.
Imbas Kembali: Pengguna Bersaing
Syabas! Anda telah mempelajari corak Pengguna Bersaing:
- Corak ini membolehkan beberapa pengguna memproses mesej daripada satu baris gilir.
- Corak ini sangat baik untuk penskalaan dan pengimbangan beban pemprosesan mesej.
- Pengagihan round-robin lalai RabbitMQ dan tetapan QoS membantu memastikan pengagihan yang adil.
- Pertimbangkan idempoten serta kemungkinan pemprosesan di luar susunan untuk kes penggunaan tertentu.
Seterusnya, kita akan mendalami pengoptimuman kecekapan pengguna dengan kiraan pratarik!
Pelajari Pemesejan RabbitMQ & Sistem Tak Segerak dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 11
- Pelajaran
- 44
Soalan Lazim
Adakah pelajaran “Corak Pengguna Bersaing” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pemesejan RabbitMQ & Sistem Tak Segerak, termasuk “Corak Pengguna Bersaing”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Pemesejan RabbitMQ & Sistem Tak Segerak merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Corak Pengguna Bersaing”?
Laksanakan corak pengguna bersaing untuk membolehkan beberapa pengguna memproses mesej daripada satu baris gilir. Tingkatkan kapasiti pemprosesan dengan menambah lebih banyak pengguna. Anda berlatih Pemesejan RabbitMQ & Sistem Tak Segerak menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Pemesejan RabbitMQ & Sistem Tak Segerak?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Pemesejan RabbitMQ & Sistem Tak Segerak di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Corak Pengguna Bersaing” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pemesejan RabbitMQ & Sistem Tak Segerak ini?
Ya. Setiap pelajaran Pemesejan RabbitMQ & Sistem Tak Segerak menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Corak Pengguna Bersaing
- Bilangan Prapengambilan (QoS)
- Pengguna Eksklusif & Keutamaan Pengguna
- Pengguna Aktif Tunggal