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');
    }

}

من أجل التوافق مع المشاريع الأخرى، لم يقدم مكون 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
    }
}

تفعيل بروتوكول stomp في rabbitmq

بروتوكول stomp غير مفعل بشكل افتراضي في rabbitmq، يجب تنفيذ الأمر التالي لتفعيله

rabbitmq-plugins enable rabbitmq_stomp

بعد التفعيل، سيكون المنفذ الافتراضي لبروتوكول stomp هو 61613.