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';
// ডেটা (অ্যারেটিভ আকারে পাস করার সময় নিজে সিরিয়ালাইজ করতে হবে, যেমন json_encode, serialize ইত্যাদি ব্যবহার করে)
$data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
// প্রেরণ সম্পাদনা করা
Client::send($queue, $data);
return response('redis queue test');
}
}
অন্যান্য প্রকল্পের সাথে সামঞ্জস্য রাখতে, Stomp উপাদান স্বয়ংক্রিয় সিরিয়েলাইজেশন এবং ডেসিরিয়ালাইজেশন ফাংশন প্রদান করেনি, যদি প্রেরণ করা হয় এটি অ্যারের ডেটা, আপনাকে নিজে সিরিয়ালাইজ করতে হবে এবং গ্রহণ করার সময় নিজে ডেসিরিয়ালাইজ করতে হবে।
বার্তা গ্রহণ
নতুন একটি 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)
{
// যদি ডেটা অ্যারে হয়, আপনাকে নিজে ডেসিরিয়ালাইজ করতে হবে
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।