1. पूर्व-ट्यूटोरियल

कृपया संबंधित ज्ञान को समझने के लिए पहले निम्नलिखित अनुभागों को पढ़ें

2. विषय एक्सचेंज की परिभाषा

// एक्सचेंज की घोषणा करें
$channel->exchange_declare(
    'tizi365.topic', // एक्सचेंज का नाम, अद्वितीय होना चाहिए, दोहराया नहीं जा सकता
    'topic', // एक्सचेंज प्रकार
    false,
    false, // क्या यह स्थायी है
    false
);

टिप: संदेश उत्पादक और उपभोक्ता दोनों को एक्सचेंज की आवश्यकता होती है।

3. संदेश भेजें

हम संदेशों को एक्सचेंज को भेजते हैं, और एक्सचेंज मार्ग नियमों के आधार पर संदेशों को संबंधित कतार में पहुंचाता है।

<?php

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

// एक खरगोश सम्बंध को बनाएं
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// चैनल बनाएँ
$channel = $connection->channel();

// एक्सचेंज की घोषणा करें
$channel->exchange_declare(
    'tizi365.topic', // एक्सचेंज का नाम, अद्वितीय होना चाहिए, दोहराया नहीं जा सकता
    'topic', // एक्सचेंज प्रकार
    false,
    false, // क्या यह स्थायी है
    false
);


// संदेश ऑब्ज
### 4.1. कतार और एक्सचेंज को बाँधें

कतार संदेश को वाणिज्य करने के लिए, आपको पहले एक कतार को परिभाषित करना होगा, और फिर उस कतार को लक्ष्य एक्सचेंज से बाँधना होगा।

```php
// एक नामरहित कतार की घोषणा करें
list($queue_name, ,) = $channel->queue_declare("", false, false, true, false);

// कतार को निर्दिष्ट एक्सचेंज से बाँधें
$channel->queue_bind(
    $queue_name, // कतार का नाम
    'tizi365.topic', // एक्सचेंज का नाम
    "*.tizi365.com" // बाँधने का रूटिंग पैरामीटर, यहाँ * (एस्टेरिस्क) का उपयोग किया जा रहा है, जो एक एकल शब्द को मिला सकता है

टिप: सेट रूटिंग पैरामीटर सभी * (एस्टेरिस्क) वाइल्डकार्ड का उपयोग करते हैं, जो एक एकल शब्द से मिला सकता है। अगर इसे # (हैश) में बदला जाए, तो यह कई शब्दों से मिला सकता है।

<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;

// एक रैबिटएमक्यू कनेक्शन बनाएँ
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
// एक चैनल बनाएँ
$channel = $connection->channel();

// एक एक्सचेंज घोषित करें
$channel->exchange_declare(
    'tizi365.topic', // एक्सचेंज का नाम, यह अनूठा होना चाहिए और दोहराया नहीं जा सकता
    'topic', // एक्सचेंज प्रकार
    false,
    false, // क्या यह सहार्य है
    false
);

// एक नामरहित कतार की घोषणा करें
list($queue_name, ,) = $channel->queue_declare("", false, false, true, false);

// कतार को निर्दिष्ट एक्सचेंज से बाँधें
$channel->queue_bind(
    $queue_name, // कतार का नाम
    'tizi365.topic', // एक्सचेंज का नाम
    "*.tizi365.com" // बाँधने की रूटिंग कुंजी, यहाँ * का उपयोग हो रहा है, जो एक एकल शब्द को मिला सकता है
);

echo " [*] संदेश का इंतजार कर रहा हूँ। निकलने के लिए CTRL+C दबाएँ\n";

// संदेश संसाधन कार्य (यहाँ एक नामरहित फ़ंक्शन का उपयोग किया जाता है)
$callback = function ($msg) {
    // संदेश प्रसंस्करण तर्क
    echo ' [x] ', $msg->body, "\n";
};

// एक उपभोक्ता बनाएँ
$channel->basic_consume(
    $queue_name, // से प्राप्त करने के लिए कतार का नाम
    '', // उपभोक्ता टैग, अगर अनदेखा किया गया है, तो स्वचालित रूप से एक समर्पित आईडी उत्पन्न होगी
    false,
    true, // क्या संदेश को स्वचालित रूप से स्वीकार करना है, अर्थात, स्वचालित रूप से रैबिटएमक्यू को बताना कि संदेश सफलतापूर्वक प्रसंस्कृत हो गया है
    false,
    false,
    $callback // संदेश संसाधन कार्य
);

// अगर चैनल बंद नहीं होता है, तो प्रक्रिया को ब्लॉक करते रहें ताकि प्रक्रिया बंद न हो
while ($channel->is_open()) {
    $channel->wait();
}

// संसाधनों को व्यतिक्रम करें
$channel->close();
$connection->close();

क्योंकि एक्सचेंज को बाँधते समय रूटिंग पैरामीटर *.tizi365.com सेट किया गया है, जो संदेश के रूटिंग पैरामीटर (www.tizi365.com) के साथ मेल खाता है, इसलिए संदेश प्राप्त किया जा सकता है।