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.
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!
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
- Pertukaran Fanout untuk Terbit/Langgan
- Pertukaran Direct untuk Penghalaan
- Pertukaran Topic untuk Penghalaan Fleksibel
- Pertukaran Lalai & Pengikatan Tersirat