Stomp Kuyruğu

Stomp, basit (akış) metin yönlendirilmiş mesaj protokolüdür ve STOMP istemcilerinin herhangi bir STOMP mesaj aracısıyla (Broker) etkileşimde bulunmasına olanak tanıyan bir etkileşimli bağlantı formatı sunar. workerman/stomp Stomp istemcisini uygular ve esas olarak RabbitMQ, Apollo, ActiveMQ gibi mesaj kuyruğu senaryolarında kullanılır.

Kurulum

composer require webman/stomp

Konfigürasyon

Konfigürasyon dosyası config/plugin/webman/stomp altında yer alır.

Mesaj Gönderme

<?php
namespace app\controller;

use support\Request;
use Webman\Stomp\Client;

class Index
{
    public function queue(Request $request)
    {
        // Kuyruk
        $queue = 'examples';
        // Veri (dizi ile gönderirken kendiniz serileştirin, örneğin json_encode, serialize vb. kullanarak)
        $data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
        // Gönderimi gerçekleştir
        Client::send($queue, $data);

        return response('redis queue test');
    }

}

Diğer projelerle uyumluluk sağlamak için, Stomp bileşeni otomatik serileştirme ve serileştirmeden çıkarma işlevi sunmaz. Dizi verileri gönderirken, kendiniz serileştirmeniz ve tüketirken kendiniz serileştirmeden çıkarmanız gerekir.

Mesaj Tüketimi

app/queue/stomp/MyMailSend.php (sınıf adı serbest, psr4 standardına uyması yeterlidir) dosyasını oluşturun.

<?php
namespace app\queue\stomp;

use Workerman\Stomp\AckResolver;
use Webman\Stomp\Consumer;

class MyMailSend implements Consumer
{
    // Kuyruk adı
    public $queue = 'examples';

    // Bağlantı adı, stomp.php içindeki bağlantı ile eşleşir
    public $connection = 'default';

    // Değer client olduğunda $ack_resolver->ack() çağrılarak sunucuya başarılı bir şekilde tükettiniz bildirilmeli
    // Değer auto olduğunda $ack_resolver->ack() çağrılması gerekmiyor
    public $ack = 'auto';

    // Tüketim
    public function consume($data, AckResolver $ack_resolver = null)
    {
        // Eğer veri dizi ise, kendiniz serileştirmeden çıkarın
        var_export(json_decode($data, true)); // Çıktı: ['to' => 'tom@gmail.com', 'content' => 'hello']
        // Sunucuya başarılı bir şekilde tükettiğinizi bildirin
        $ack_resolver->ack(); // ack auto olduğunda bu çağrıyı atlayabilirsiniz
    }
}

rabbitmq'de stomp protokolünü etkinleştirme

rabbitmq varsayılan olarak stomp protokolünü etkinleştirmemiştir. Aşağıdaki komutu çalıştırarak etkinleştirmeniz gerekir.

rabbitmq-plugins enable rabbitmq_stomp

Etkinleştirildikten sonra stomp'un varsayılan portu 61613'tür.