RabbitMQ: exchange, queue ও routing
RabbitMQ exchange ও queue-কেন্দ্রিক একটি নমনীয় message broker। Routing কীভাবে হয় এবং কাজ হারানো বা দ্বিগুণ হওয়া কীভাবে এড়ান, জানুন।

RabbitMQ একটি message broker। Producer সরাসরি queue-তে পাঠায় না। সে exchange-এ publish করে, যা নিয়ম অনুযায়ী message এক বা একাধিক queue-তে route করে। Consumer queue থেকে পড়ে।
অংশগুলো
- Exchange: message নেয় এবং কোথায় যাবে ঠিক করে।
- Queue: consumer নেওয়া পর্যন্ত message জমিয়ে রাখে।
- Binding: exchange ও queue যুক্ত করা নিয়ম।
- Routing key: message-এর লেবেল, যা binding ব্যবহার করে।
Exchange-এর ধরন
- Direct: routing key পুরোপুরি মিললে সেই queue-তে দেয়।
- Fanout: যুক্ত সব queue-তে কপি করে (broadcast)।
- Topic:
orders.*.created-এর মতো pattern মেলায়। - Headers: message header দেখে route করে।
নির্ভরযোগ্যতা
- Acknowledgement: কাজ শেষে consumer ack পাঠায়। আগে মরলে message queue-তে ফিরে অন্য consumer পায়। এতে at-least-once delivery হয়, তাই handler idempotent রাখুন।
- Durable queue ও persistent message broker restart-এ টিকে থাকে।
- Publisher confirm producer-কে জানায় broker message পেয়েছে।
- Prefetch: একজন consumer কতগুলো ack-না-করা message ধরে রাখবে তার সীমা, যাতে একটি ধীর worker কাজ আটকে না রাখে।
- Dead-letter exchange: ব্যর্থ বা মেয়াদোত্তীর্ণ message দেখার জন্য আলাদা করে রাখে।
- Quorum queue high availability-র জন্য একাধিক node-এ replicate করে।
সাধারণ ব্যবহার
Background job (ইমেইল, ছবি প্রসেস), service-দের মধ্যে request routing, এবং worker-দের মধ্যে কাজ বণ্টন।
RabbitMQ বনাম Kafka
| RabbitMQ | Kafka | |
|---|---|---|
| মডেল | স্মার্ট routing-এর broker | distributed log |
| পড়ার পর | message সরে যায় | retention পর্যন্ত থাকে |
| Replay | ডিফল্টে নয় | হ্যাঁ |
| সেরা | task queue, নমনীয় routing | বিশাল stream, অনেক পাঠক |
মূল কথা: নমনীয় routing ও job queue লাগলে RabbitMQ নিন, সবসময় ack ও dead-letter পথ রাখুন, আর consumer idempotent রাখুন।
System Design সিরিজ, পর্ব ২ (building block): 3 নম্বর (মোট 14)। আগের লেখা: Apache Kafka: topic, partition ও consumer group.


