企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 官方文档: https://www.workerman.net/plugin/13 Stomp封装的Message Queue中间件 # 原理: ## 循环投递数据,然后投递完毕可以关闭浏览器---->然后让消费端去完成数据然后存入redis或者mysql里。 ## 真正 实现了程序异步设计的思想 ## 投递端 ``` <?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'); } } ``` ## 消费消息端 ``` <?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时可以省略此调用 } } ``` # 配置: ![](https://img.kancloud.cn/e7/fc/e7fcd4dc74eea025e0a6cb70c91d54c1_1008x853.png) ``` <?php return [ 'default' => [ 'host' => 'stomp://127.0.0.1:61613', 'options' => [ 'vhost' => '/', 'login' => 'guest', 'passcode' => 'guest', 'debug' => false, ], 'amqp' => [ 'host' => '127.0.0.1', 'port' => 5672, 'namespace' => '', 'exchange_name' => 'exchange', 'exchange_delay' => true ] ] ]; ```