Hàng đợi Stomp
Stomp là giao thức tin nhắn định hướng văn bản đơn giản (streaming), cung cấp định dạng kết nối tương tác cho phép máy khách Stomp tương tác với bất kỳ broker tin nhắn Stomp nào. workerman/stomp triển khai máy khách Stomp, chủ yếu dùng cho hàng đợi tin nhắn như RabbitMQ, Apollo, ActiveMQ, v.v.
Cài đặt
composer require webman/stomp
Cấu hình
Tệp cấu hình nằm ở config/plugin/webman/stomp
Gửi tin nhắn
<?php
namespace app\controller;
use support\Request;
use Webman\Stomp\Client;
class Index
{
public function queue(Request $request)
{
// Hàng đợi
$queue = 'examples';
// Dữ liệu (khi truyền mảng cần tự serialize, ví dụ dùng json_encode, serialize, v.v.)
$data = json_encode(['to' => 'tom@gmail.com', 'content' => 'hello']);
// Thực hiện gửi
Client::send($queue, $data);
return response('redis queue test');
}
}
Để tương thích với dự án khác, thành phần Stomp không cung cấp tự động serialize và unserialize. Nếu gửi dữ liệu mảng, cần tự serialize khi gửi và tự unserialize khi tiêu thụ.
Tiêu thụ tin nhắn
Tạo mới app/queue/stomp/MyMailSend.php (tên lớp tùy ý, theo chuẩn PSR-4).
<?php
namespace app\queue\stomp;
use Workerman\Stomp\AckResolver;
use Webman\Stomp\Consumer;
class MyMailSend implements Consumer
{
// Tên hàng đợi
public $queue = 'examples';
// Tên kết nối, tương ứng với kết nối trong stomp.php
public $connection = 'default';
// Khi giá trị là client, cần gọi $ack_resolver->ack() để thông báo cho máy chủ đã tiêu thụ thành công
// Khi giá trị là auto, không cần gọi $ack_resolver->ack()
public $ack = 'auto';
// Tiêu thụ
public function consume($data, AckResolver $ack_resolver = null)
{
// Nếu dữ liệu là mảng, cần tự unserialize
var_export(json_decode($data, true)); // In ra ['to' => 'tom@gmail.com', 'content' => 'hello']
// Thông báo cho máy chủ đã tiêu thụ thành công
$ack_resolver->ack(); // Khi ack là auto có thể bỏ qua lệnh gọi này
}
}
Bật giao thức Stomp trong RabbitMQ
RabbitMQ mặc định không bật giao thức Stomp, cần chạy lệnh sau để bật:
rabbitmq-plugins enable rabbitmq_stomp
Sau khi bật, cổng mặc định của Stomp là 61613.