Stomp队ली
Stomp एक सरल (स्ट्रीम) टेक्स्ट-आधारित संदेश प्रोटोकॉल है, जो एक पारस्परिक रूप से उपयोगी कनेक्शन प्रारूप प्रदान करता है, जिससे STOMP क्लाइंट किसी भी STOMP संदेश ब्रोकर (Broker) के साथ संवाद कर सकते हैं।workerman/stomp ने Stomp क्लाइंट को लागू किया है, जिसका मुख्य उपयोग RabbitMQ, Apollo, ActiveMQ आदि संदेश कतार परिदृश्यों में है।
स्थापना
composer require webman/stomp
कॉन्फ़िगरेशन
कॉन्फ़िगरेशन फ़ाइल config/plugin/webman/stomp
के तहत है
संदेश भेजना
<?php
namespace app\controller;
use support\Request;
use Webman\Stomp\Client;
class Index
{
public function queue(Request $request)
{
// कतार
$queue = 'examples';
// डेटा (Array को पारित करते समय स्वयं सीरियलाइज़ करना आवश्यक है, जैसे json_encode, serialize आदि का उपयोग करके)
$data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
// भेजने का कार्यान्वयन
Client::send($queue, $data);
return response('redis queue test');
}
}
अन्य परियोजनाओं के साथ संगतता के लिए, Stomp घटक स्वचालित सीरियलाइज़ेशन और डीसीरियलाइज़ेशन की सुविधा प्रदान नहीं करता है। यदि आप Array डेटा भेजते हैं, तो आपको स्वयं सीरियलाइज़ करना होगा, और खपत करते समय स्वयं डीसीरियलाइज़ करना होगा।
संदेश प्राप्त करना
नया फ़ाइल बनाएं app/queue/stomp/MyMailSend.php
(क्लास का नाम कोई भी हो सकता है, बस psr4 मानक का पालन करना होगा)।
<?php
namespace app\queue\stomp;
use Workerman\Stomp\AckResolver;
use Webman\Stomp\Consumer;
class MyMailSend implements Consumer
{
// कतार का नाम
public $queue = 'examples';
// कनेक्शन का नाम, यह stomp.php में कनेक्शन से संबंधित है
public $connection = 'default';
// 'client' होने पर $ack_resolver->ack() को कॉल करके सर्वर को बताना होगा कि खपत सफल रहा
// 'auto' होने पर $ack_resolver->ack() को कॉल करने की आवश्यकता नहीं है
public $ack = 'auto';
// खपत करना
public function consume($data, AckResolver $ack_resolver = null)
{
// यदि डेटा Array है, तो स्वयं डीसीरियलाइज़ करना आवश्यक है
var_export(json_decode($data, true)); // आउटपुट ['to' => 'tom@gmail.com', 'content' => 'hello']
// सर्वर को बताना कि खपत सफल रहा
$ack_resolver->ack(); // ack 'auto' होने पर इस कॉल को छोड़ सकते हैं
}
}
rabbitmq में stomp प्रोटोकॉल सक्रिय करना
rabbitmq में डिफॉल्ट रूप से stomp प्रोटोकॉल सक्रिय नहीं होता है, इसे सक्रिय करने के लिए निम्नलिखित कमांड चलाना आवश्यक है
rabbitmq-plugins enable rabbitmq_stomp
एक बार सक्रिय करने के बाद, stomp का पोर्ट डिफॉल्ट रूप से 61613 है।