RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ · पाठ

Headers एक्सचेंज का गहन अध्ययन

रूटिंग कुंजियों के बजाय हेडर विशेषताओं के आधार पर मैसेज रूट करने वाले Headers एक्सचेंज का अन्वेषण करें। अधिक जटिल और गतिशील रूटिंग नियम लागू करें।

पाठ 1, कुल 4 में से11 चरण

Headers एक्सचेंज का गहन अध्ययन, CoddyKit पर RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

हेडर्स एक्सचेंज: नई रूटिंग

हेडर्स एक्सचेंज से परिचित हों! सरल routing_key स्ट्रिंग का उपयोग करने वाले डायरेक्ट या टॉपिक एक्सचेंज के विपरीत, हेडर्स एक्सचेंज अपने हेडर एट्रिब्यूट के आधार पर संदेशों को रूट करते हैं।

इसे संदेश से जुड़े कुंजी-मान युग्मों का उपयोग करके संदेशों को फ़िल्टर करने का अधिक लचीला तरीका समझें।

संदेश हेडर के आधार पर रूटिंग

जब कोई प्रोड्यूसर संदेश भेजता है, तो उसमें कुंजी-मान युग्मों का एक मानचित्र (हेडर) शामिल होता है। कंज़्यूमर अपनी हेडर शर्तों के समूह के साथ अपनी कतार को हेडर्स एक्सचेंज से बाइंड करता है।

इसके बाद एक्सचेंज संदेश के हेडर की तुलना बाइंडिंग नियमों से करता है और तय करता है कि संदेश कहाँ पहुँचाना है।

मिलान तर्क: 'all' या 'any'

हेडर्स एक्सचेंज मिलान तर्क निर्धारित करने के लिए बाइंडिंग में x-match नामक विशेष आर्ग्युमेंट का उपयोग करते हैं:

  • "all": संदेश के हेडर में बाइंडिंग में निर्दिष्ट सभी कुंजी-मान युग्म होने चाहिए।
  • "any": संदेश के हेडर में बाइंडिंग में निर्दिष्ट कुंजी-मान युग्मों में से कम-से-कम एक होना चाहिए।

इससे संदेशों की डिलीवरी पर शक्तिशाली नियंत्रण मिलता है!

कस्टम हेडर के साथ प्रोड्यूस करना

आइए देखें कि प्रोड्यूसर किसी संदेश में कस्टम हेडर कैसे जोड़ता है। हम format: json और type: report हेडर के साथ एक सरल टेक्स्ट संदेश भेजेंगे।

संदेश भेजने के लिए यह कोड चलाएँ:

import com.rabbitmq.client.*;
import java.util.HashMap;
import java.util.Map;

public class HeadersProducer {
    private static final String EXCHANGE = "my_headers_exchange";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        try (Connection conn = factory.newConnection();
             Channel channel = conn.createChannel()) {

            channel.exchangeDeclare(EXCHANGE, "headers");

            Map<String, Object> headers = new HashMap<>();
            headers.put("format", "json");
            headers.put("type", "report"); // Add headers

            String msg = "Report Data (JSON)";
            AMQP.BasicProperties props = new AMQP.BasicProperties.Builder()
                                            .headers(headers)
                                            .build();
            channel.basicPublish(EXCHANGE, "", props, msg.getBytes("UTF-8"));
            System.out.println(" [x] Sent: '" + msg + "' with headers: " + headers);
        }
    }
}

कंज़्यूमर 'All' मिलान का उदाहरण

यह कंज़्यूमर केवल तभी संदेश प्राप्त करेगा जब उसके निर्दिष्ट सभी हेडर (format: json AND type: report) आने वाले संदेश में मौजूद हों।

पहले इस कंज़्यूमर को चलाएँ, फिर पिछले दृश्य के प्रोड्यूसर को।

import com.rabbitmq.client.*;
import java.util.HashMap;
import java.util.Map;

public class HeadersConsumerAll {
    private static final String EXCHANGE = "my_headers_exchange";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection conn = factory.newConnection();
        Channel channel = conn.createChannel();

        channel.exchangeDeclare(EXCHANGE, "headers");
        String queueName = channel.queueDeclare().getQueue();

        Map<String, Object> bindHeaders = new HashMap<>();
        bindHeaders.put("x-match", "all");
        bindHeaders.put("format", "json");
        bindHeaders.put("type", "report"); // Requires both

        channel.queueBind(queueName, EXCHANGE, "", bindHeaders);
        System.out.println(" [*] Waiting for msgs with ALL: " + bindHeaders);

        DeliverCallback dc = (ct, delivery) -> {
            String msg = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + msg + "' Headers: " + delivery.getProperties().getHeaders());
        };
        channel.basicConsume(queueName, true, dc, ct -> {});
    }
}

कंज़्यूमर 'Any' मिलान का उदाहरण

अब, आइए ऐसा कंज़्यूमर बनाएँ जो अपने निर्दिष्ट हेडर में से कोई भी (format: xml OR priority: high) मौजूद होने पर संदेश प्राप्त करे।

इस कंज़्यूमर को चलाएँ। फिर अलग-अलग हेडर संयोजनों वाले संदेश भेजकर देखें।

import com.rabbitmq.client.*;
import java.util.HashMap;
import java.util.Map;

public class HeadersConsumerAny {
    private static final String EXCHANGE = "my_headers_exchange";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection conn = factory.newConnection();
        Channel channel = conn.createChannel();

        channel.exchangeDeclare(EXCHANGE, "headers");
        String queueName = channel.queueDeclare().getQueue();

        Map<String, Object> bindHeaders = new HashMap<>();
        bindHeaders.put("x-match", "any");
        bindHeaders.put("format", "xml"); // Matches if format is xml
        bindHeaders.put("priority", "high"); // OR if priority is high

        channel.queueBind(queueName, EXCHANGE, "", bindHeaders);
        System.out.println(" [*] Waiting for msgs with ANY: " + bindHeaders);

        DeliverCallback dc = (ct, delivery) -> {
            String msg = new String(delivery.getBody(), "UTF-8");
            System.out.println(" [x] Received '" + msg + "' Headers: " + delivery.getProperties().getHeaders());
        };
        channel.basicConsume(queueName, true, dc, ct -> {});
    }
}

`x-match` मानों के बारे में अधिक जानकारी

हालाँकि "all" और "any" प्राथमिक x-match मान हैं, आप x-match को छोड़ भी सकते हैं। यदि x-match नहीं दिया गया है, तो इसका डिफ़ॉल्ट मान "all" होता है।

ध्यान रखें कि हेडर मानों का बिल्कुल सटीक मिलान होना चाहिए। उदाहरण के लिए, "type": "report" का मिलान "type": "Report" से नहीं होगा।

हेडर्स एक्सचेंज का उपयोग कब करें

हेडर्स एक्सचेंज इनके लिए बहुत उपयोगी हैं:

  • गतिशील रूटिंग: जब कोड तैनात किए बिना रूटिंग तर्क में बार-बार बदलाव होता हो।
  • जटिल फ़िल्टरिंग: कई गैर-पदानुक्रमित एट्रिब्यूट के आधार पर रूटिंग।
  • नीति-आधारित रूटिंग: उदाहरण के लिए, उच्च प्राथमिकता वाले संदेशों को एक समर्पित कतार तक रूट करना।

जहाँ रूटिंग कुंजियाँ बहुत कठोर हो सकती हैं, वहाँ यह लचीलापन प्रदान करता है।

हेडर्स बनाम अन्य एक्सचेंज

हेडर्स की तुलना कैसे की जाती है?

  • डायरेक्ट: सटीक routing_key मिलान के आधार पर रूट करता है।
  • टॉपिक: routing_key पैटर्न (वाइल्डकार्ड) के आधार पर रूट करता है।
  • हेडर्स: मनमाने संदेश हेडर कुंजी-मान युग्मों के आधार पर रूट करता है और एट्रिब्यूट-आधारित अधिक लचीलापन प्रदान करता है।

अपनी संदेश रूटिंग आवश्यकताओं के लिए सबसे उपयुक्त एक्सचेंज प्रकार चुनें!

हेडर्स एक्सचेंज प्रश्नोत्तरी

एक प्रोड्यूसर {"color": "red", "size": "large"} हेडर के साथ एक संदेश भेजता है।

कौन-से कंज़्यूमर बाइंडिंग कॉन्फ़िगरेशन इस संदेश को प्राप्त करेंगे?

पाठ का सारांश

इस पाठ में हमने शक्तिशाली हेडर्स एक्सचेंज का अध्ययन किया। आपने सीखा:

  • यह हेडर कुंजी-मान युग्मों के आधार पर संदेशों को रूट करता है।
  • x-match आर्ग्युमेंट ("all" या "any") मिलान तर्क को नियंत्रित करता है।
  • लचीली, एट्रिब्यूट-आधारित संदेश रूटिंग के लिए इसका उपयोग कैसे करें।

जटिल फ़िल्टरिंग की स्थितियों में यह एक्सचेंज रूटिंग कुंजियों का एक मजबूत विकल्प प्रदान करता है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
11
पाठ
44

अक्सर पूछे जाने वाले प्रश्न

क्या “Headers एक्सचेंज का गहन अध्ययन” पाठ निःशुल्क है?

हाँ — RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Headers एक्सचेंज का गहन अध्ययन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Headers एक्सचेंज का गहन अध्ययन” में मैं क्या सीखूँगा?

रूटिंग कुंजियों के बजाय हेडर विशेषताओं के आधार पर मैसेज रूट करने वाले Headers एक्सचेंज का अन्वेषण करें। अधिक जटिल और गतिशील रूटिंग नियम लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“Headers एक्सचेंज का गहन अध्ययन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Headers एक्सचेंज का गहन अध्ययन
  2. एक्सचेंज-से-एक्सचेंज बाइंडिंग
  3. डेड लेटर एक्सचेंज (DLX)
  4. रूट न हो सकने वाले संदेशों के लिए वैकल्पिक एक्सचेंज
← RabbitMQ संदेश-प्रणाली और अतुल्यकालिक प्रणालियाँ पर वापस जाएँ