Hàng đợi Stomp
Stomp là giao thức tin nhắn định hướng văn bản đơn giản, cung cấp định dạng kết nối tương tác cho phép khách hàng Stomp tương tác với bất kỳ trung tâm tin nhắn Stomp (Broker) nào. workerman/stomp triển khai khách hàng Stomp, chủ yếu được sử dụng trong các trường hợp 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 chuyển mảng cần tự serialize, ví dụ sử 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 các dự án khác, thành phần Stomp không cung cấp chức năng tự động serialize và unserialize. Nếu dữ liệu gửi là mảng, cần phải tự serialize và unserialize khi tiêu thụ.
Tiêu thụ tin nhắn
Tạo mới app/queue/stomp/MyMailSend.php
(tên lớp có thể là bất kỳ, chỉ cần tuân theo quy tắc psr4).
<?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 tệp stomp.php
public $connection = 'default';
// Khi giá trị là client, cần gọi $ack_resolver->ack() để thông báo rằng đã 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 phải tự unserialize
var_export(json_decode($data, true)); // In ra ['to' => 'tom@gmail.com', 'content' => 'hello']
// Thông báo rằng đã tiêu thụ thành công
$ack_resolve->ack(); // Khi ack là auto, có thể bỏ qua cuộc gọi này
}
}
Mở giao thức stomp cho rabbitmq
RabbitMQ mặc định không mở giao thức stomp, cần thực hiện các lệnh sau để mở
rabbitmq-plugins enable rabbitmq_stomp
Sau khi mở, cổng mặc định của stomp sẽ là 61613.