标签:
简介
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。
标签: 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。