Pemesejan RabbitMQ & Sistem Tak Segerak · Pelajaran

Pertukaran Direct untuk Penghalaan

Pelajari cara menggunakan pertukaran Direct untuk penghalaan mesej yang tepat berdasarkan kunci penghalaan. Halakan mesej kepada baris gilir tertentu untuk pemprosesan bersasar.

Pelajaran 2 daripada 411 langkah

Pertukaran Direct untuk Penghalaan 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.

Pengenalan kepada Pertukaran Terus

Selamat datang! Dalam pelajaran ini, kita akan meneroka Pertukaran Terus dalam RabbitMQ. Ia ialah alat berkuasa untuk menghantar mesej ke baris gilir tertentu berdasarkan kunci penghalaan.

Anggaplah ia seperti perkhidmatan pos yang menghantar surat hanya ke alamat tepat yang dinyatakan pada sampul surat.

Apakah itu Kunci Penghalaan?

Kunci penghalaan ialah atribut rentetan yang dilampirkan oleh pengeluar pada mesej. Pada asasnya, ia ialah “alamat” bagi mesej tersebut.

  • Pengeluar menetapkan kunci penghalaan semasa menerbitkan mesej.
  • Baris gilir terikat kepada pertukaran dengan satu atau lebih kunci penghalaan.
  • Mesej dihantar kepada baris gilir yang kunci pengikatannya sepadan tepat dengan kunci penghalaan mesej.

Cara Pertukaran Terus Berfungsi

Apabila mesej tiba di Pertukaran Terus, pertukaran itu melihat kunci penghalaan mesej. Kemudian, pertukaran menghantar mesej kepada semua baris gilir yang terikat padanya dengan kunci penghalaan yang sama.

Jika tiada baris gilir yang terikat dengan kunci penghalaan tertentu itu, mesej akan dibuang begitu sahaja oleh pertukaran.

Peranan Pengeluar: Menghantar dengan Kunci

Sebagai pengeluar, anda menentukan kunci penghalaan untuk setiap mesej yang anda hantar. Kunci ini menentukan pengguna (melalui baris gilir yang terikat padanya) yang akan menerima mesej tersebut.

Ini membolehkan kawalan yang tepat terhadap penghantaran mesej, dengan memastikan hanya pengguna yang berkaitan menerima jenis mesej tertentu.

Peranan Pengguna: Pengikatan dengan Kunci

Pengguna menyatakan minat mereka terhadap mesej dengan mengikat baris gilir mereka pada Direct Exchange menggunakan kunci penghalaan tertentu.

Satu baris gilir boleh diikat dengan berbilang kunci penghalaan, supaya baris gilir tersebut boleh menerima mesej yang sepadan dengan mana-mana kunci itu.

Kod: Persediaan dan Pengisytiharan Pengeluar

Mari sediakan pengeluar asas yang menggunakan Direct Exchange. Kita akan mengisytiharkan pertukaran bernama "direct_logs" dengan jenis "direct".

Kod ini mewujudkan sambungan dan saluran, kemudian mengisytiharkan pertukaran tersebut.

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class DirectProducerSetup {
    private static final String EXCHANGE_NAME = "direct_logs";

    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.exchangeDeclare(EXCHANGE_NAME, "direct");
            System.out.println("Exchange '" + EXCHANGE_NAME + "' declared.");

            // In a real app, you'd send messages here
            // For this setup example, we just declare.
        }
    }
}

Kod: Menghantar Mesej oleh Pengeluar

Sekarang, mari hantar mesej kepada pertukaran "direct_logs" kita. Kita akan menentukan kunci penghalaan, contohnya "error".

Jalankan kod ini selepas memastikan pelayan RabbitMQ anda sedang berjalan. Kod ini akan menerbitkan mesej dengan kunci yang ditentukan.

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.nio.charset.StandardCharsets;

public class DirectProducerSend {
    private static final String EXCHANGE_NAME = "direct_logs";

    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.exchangeDeclare(EXCHANGE_NAME, "direct"); // Ensure exchange exists

            String routingKey = "error";
            String message = "A critical error occurred!";

            channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes(StandardCharsets.UTF_8));
            System.out.println(" [x] Sent '" + routingKey + ":'" + message + "'");
        }
    }
}

Kod: Persediaan dan Pengikatan Pengguna

Di pihak pengguna, kita akan mencipta baris gilir dan mengikatnya pada pertukaran "direct_logs" menggunakan kunci penghalaan "error".

Pengguna ini hanya akan menerima mesej yang diterbitkan dengan kunci penghalaan "error". Jalankan pengguna ini dahulu, kemudian pengeluar.

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;

public class DirectConsumerError {
    private static final String EXCHANGE_NAME = "direct_logs";

    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.exchangeDeclare(EXCHANGE_NAME, "direct");

        String queueName = channel.queueDeclare().getQueue(); // Create a non-durable, exclusive, auto-delete queue
        String bindingKey = "error";
        channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);

        System.out.println(" [*] Waiting for messages with routing key '" + bindingKey + "'. To exit press CTRL+C");

        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            String message = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + delivery.getEnvelope().getRoutingKey() + ":'" + message + "'");
        };
        channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {});
    }
}

Pengikatan Berbilang dan Kes Penggunaan

Satu baris gilir boleh diikat pada Direct Exchange yang sama dengan berbilang kunci penghalaan. Sebagai contoh, baris gilir "amaran kritikal" mungkin diikat pada kedua-dua kunci "error" dan "warning" untuk menerima kedua-dua jenis mesej.

Direct Exchange sangat sesuai untuk senario seperti:

  • Mengedarkan log berdasarkan tahap keterukan (contohnya, info, amaran, ralat).
  • Menghalakan peristiwa sistem dalaman kepada modul pemprosesan tertentu.
  • Menyasarkan kemas kini kepada segmen pengguna tertentu.

Semakan Pantas: Penghalaan Direct

Pertimbangkan Direct Exchange bernama "my_exchange".

  • Baris gilir A diikat dengan kunci penghalaan "report".
  • Baris gilir B diikat dengan kunci penghalaan "alert".
  • Baris gilir C diikat dengan kunci penghalaan "report" dan "update".

Pengeluar menghantar mesej kepada "my_exchange" dengan kunci penghalaan "report".

Imbas Kembali: Direct Exchange

Syabas! Anda telah mempelajari tentang Direct Exchange dalam RabbitMQ.

  • Ia menghalakan mesej berdasarkan padanan tepat kunci penghalaan.
  • Pengeluar melampirkan kunci penghalaan pada setiap mesej.
  • Pengguna mengikat baris gilir mereka pada pertukaran dengan kunci penghalaan tertentu untuk menerima mesej yang berkaitan.
  • Corak ini membolehkan penghantaran mesej yang tepat dan disasarkan.

Seterusnya, kita akan meneroka Fanout Exchange, yang menyiarkan mesej kepada semua baris gilir yang terikat, tanpa mengira kunci penghalaan!

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 “Pertukaran Direct untuk Penghalaan” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pemesejan RabbitMQ & Sistem Tak Segerak, termasuk “Pertukaran Direct untuk Penghalaan”, 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 “Pertukaran Direct untuk Penghalaan”?

Pelajari cara menggunakan pertukaran Direct untuk penghalaan mesej yang tepat berdasarkan kunci penghalaan. Halakan mesej kepada baris gilir tertentu untuk pemprosesan bersasar. 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 “Pertukaran Direct untuk Penghalaan” 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. Pertukaran Fanout untuk Terbit/Langgan
  2. Pertukaran Direct untuk Penghalaan
  3. Pertukaran Topic untuk Penghalaan Fleksibel
  4. Pertukaran Lalai & Pengikatan Tersirat
← Kembali ke Pemesejan RabbitMQ & Sistem Tak Segerak