Pemesejan RabbitMQ & Sistem Tak Segerak · Pelajaran

Baris Gilir Kerja: Pengagihan Saksama

Laksanakan baris gilir kerja untuk mengagihkan tugas kepada beberapa pengguna menggunakan strategi pengagihan secara bergilir. Pelajari cara memproses tugas yang memakan masa secara tak segerak.

Pelajaran 2 daripada 411 langkah

Baris Gilir Kerja: Pengagihan Saksama ialah pelajaran Pemesejan RabbitMQ & Sistem Tak Segerak percuma di CoddyKit. Ini ialah pelajaran 2 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.

Kenali Baris Gilir Kerja

Selamat datang ke Baris Gilir Kerja! Dalam sistem teragih, anda sering mempunyai tugas yang mengambil masa untuk diselesaikan, seperti memproses imej atau menjana laporan.

Baris Gilir Kerja ialah corak yang membantu mengagihkan tugas yang mengambil masa antara beberapa pekerja (pengguna) dengan cekap, sekali gus mengelakkan mana-mana pekerja terbeban.

Mengapa Menggunakan Baris Gilir Kerja?

Bayangkan anda mempunyai banyak kerja untuk dilakukan tetapi hanya seorang pekerja. Jika semua kerja diberikan kepada pekerja itu, dia akan terbeban dan tugas akan bertimbun.

  • Pengimbangan Beban: Baris gilir kerja membolehkan anda menambah lebih banyak pekerja untuk berkongsi beban.
  • Pemprosesan Tak Segerak: Pengeluar tidak menunggu tugas selesai; pengeluar hanya menambahkannya ke dalam baris gilir.
  • Kebolehpercayaan: Jika seorang pekerja gagal, pekerja lain boleh mengambil tugas tersebut.

Cara Baris Gilir Kerja Beroperasi

Persediaan untuk baris gilir kerja adalah mudah:

  • Satu pengeluar menghantar mesej (tugas) kepada satu baris gilir.
  • Beberapa pengguna mendengar baris gilir yang sama.
  • RabbitMQ memastikan setiap mesej dihantar kepada hanya seorang pengguna yang sedang menunggu.

Dengan cara ini, tugas tidak pernah diduplikasi dan diproses secara selari.

Penghantaran Adil: Giliran Berpusing

Secara lalai, RabbitMQ mengagihkan mesej kepada pengguna menggunakan strategi giliran berputar. Ini bermaksud mesej dihantar kepada pengguna secara bergilir-gilir:

  • Pengguna 1 mendapat mesej pertama.
  • Pengguna 2 mendapat mesej kedua.
  • Pengguna 1 mendapat mesej ketiga dan seterusnya.

Tujuannya adalah untuk mengagihkan tugas secara sama rata antara semua pengguna aktif.

Pengeluar Tugas

Mari cipta pengeluar yang menghantar 10 tugas kepada baris gilir kita. Setiap tugas akan berupa rentetan ringkas seperti 'Processing image 1'.

Jalankan kod ini sekali untuk mengisi baris gilir dengan tugas.

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()) {

            channel.queueDeclare(QUEUE_NAME, false, false, false, null);

            for (int i = 0; i < 10; i++) {
                String message = "Processing image " + (i + 1);
                channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
                System.out.println(" [x] Sent '" + message + "'");
            }
            System.out.println(" [x] All tasks sent.");
        }
    }
}

Menghuraikan Kod Pengeluar

Apakah yang berlaku dalam kod pengeluar kita?

  • Kita mewujudkan sambungan dan saluran untuk berinteraksi dengan RabbitMQ.
  • channel.queueDeclare(QUEUE_NAME, false, false, false, null); memastikan baris gilir tersebut wujud. Bendera false menjadikannya tidak kekal dan tidak eksklusif demi kesederhanaan dalam contoh ini.
  • Satu gelung menghantar 10 mesej ke task_queue. Setiap mesej mewakili tugas yang berbeza.

Pengguna Tugas Pertama Kita

Sekarang, mari kita cipta seorang pengguna, yang akan kita panggil sebagai “pekerja”. Pekerja ini akan mendengar tugas daripada task_queue.

Kita akan mensimulasikan tugas yang berjalan lama menggunakan Thread.sleep(). Jalankan kod ini dalam satu tetingkap 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"); // Assuming RabbitMQ is local

        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + message + "'");
            try {
                // Simulate long-running task
                Thread.sleep(1000); // 1 second per task
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            } finally {
                System.out.println(" [x] Done with '" + message + "'");
            }
        };
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {});
    }
}

Huraian Kod Pengguna

Mari kita lihat logik pengguna:

  • Seperti pengeluar, pengguna menyambung dan mengisytiharkan baris gilir.
  • DeliverCallback mentakrifkan tindakan yang akan dilakukan apabila mesej tiba.
  • Di dalam panggilan balik, Thread.sleep(1000) mensimulasikan tugas selama 1 saat.
  • channel.basicConsume(QUEUE_NAME, true, deliverCallback, ...) memulakan penggunaan mesej. Nilai true bermaksud mesej diakui secara automatik selepas dihantar.

Menskalakan dengan Berbilang Pekerja

Berikut ialah demonstrasi utama baris gilir kerja:

1. Jalankan kod TaskConsumer dalam dua tetingkap terminal berasingan (atau tika).

2. Kemudian, jalankan kod TaskProducer sekali.

Anda akan melihat bahawa 10 tugas dibahagikan antara dua tika pekerja tersebut, dengan setiap satunya memproses kira-kira 5 tugas berdasarkan penghantaran secara giliran oleh RabbitMQ.

Kuiz Baris Gilir Kerja

Bayangkan anda mempunyai satu baris gilir RabbitMQ dan dua pengguna (Pekerja A dan Pekerja B) yang mendengarnya. Seorang pengeluar menghantar 4 mesej (M1, M2, M3, M4) ke baris gilir ini.

Pernyataan manakah yang menerangkan dengan tepat cara mesej biasanya diagihkan menggunakan penghantaran adil lalai RabbitMQ?

Baris Gilir Kerja: Kesimpulan Utama

Anda telah berjaya melaksanakan Baris Gilir Kerja, iaitu corak asas untuk mengagihkan tugas merentas berbilang pengguna!

  • Baris gilir kerja membolehkan pemprosesan tak segerak dan menghalang titik kegagalan tunggal.
  • Strategi penghantaran secara giliran lalai RabbitMQ memastikan tugas diagihkan secara adil.
  • Dengan menjalankan berbilang tika pengguna, anda boleh menskalakan kapasiti pemprosesan tugas dengan mudah.

Seterusnya, kita akan mempelajari cara menjadikan pengendalian mesej anda lebih teguh dengan pengesahan dan ketahanan mesej!

Percuma untuk bermula

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 “Baris Gilir Kerja: Pengagihan Saksama” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pemesejan RabbitMQ & Sistem Tak Segerak, termasuk “Baris Gilir Kerja: Pengagihan Saksama”, 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 “Baris Gilir Kerja: Pengagihan Saksama”?

Laksanakan baris gilir kerja untuk mengagihkan tugas kepada beberapa pengguna menggunakan strategi pengagihan secara bergilir. Pelajari cara memproses tugas yang memakan masa secara tak segerak. 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 2 daripada 4.

Berapa lamakah pelajaran “Baris Gilir Kerja: Pengagihan Saksama” 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

  1. Helo Dunia: Baris Gilir Ringkas
  2. Baris Gilir Kerja: Pengagihan Saksama
  3. Pengesahan dan Ketahanan Mesej
  4. Terbit/Langgan dengan Pertukaran Fanout
← Kembali ke Pemesejan RabbitMQ & Sistem Tak Segerak