ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## exchange - 交换机 ~~~ use \api\Rmq; // @param:交换机名称 // @param:是否创建为延迟交换机,默认:FALSE // @param:交换机类型,默认:direct // @param:当交换机不存在时不自动创建,默认:FALSE // @param:持久化,默认:TRUE // @param:连接断开后自动删除交换机,默认:FALSE $Rmq = Rmq::exchange('exchange'); ~~~ <br/> ## queue - 队列 ~~~ use \api\Rmq; // @param:队列名称 // @param:是否创建为延迟队列 // @param:当队列不存在时不自动创建,默认:FALSE // @param:持久化,默认:TRUE // @param:队列允许其他通道消费,默认:FALSE // @param:队列执行完毕后自动删除,默认:FALSE Rmq::queue('queue'); ~~~ <br/> ## bind - 将队列绑定到交换机 ~~~ use \api\Rmq; // @param:路由,默认:空 Rmq::bind(); ~~~ <br/> ## add - 添加队列 ~~~ // 如果第二个参数是FALSE(不是批量写入的情况下),到此就已经将数据写入到队列 // @param:写入的内容,字符串或者数组格式 // @param:是否批量写入,默认:FALSE // @param:延迟写入,默认:FALSE,如果需要延迟,则单位为秒 $Rmq->add([ 'txt' => 'content' ]); ~~~ <br/> ## public - 执行批量写入队列 ~~~ for ($i = 1; $i < 1001; $i++) $Rmq->add([ 'txt' => $i ], TRUE); // 批量写入 $Rmq->publish(); ~~~ <br/> ## consume - 消费队列 ~~~ use \api\Rmq; // @param:消费回调,在此处理自己的业务,默认会传递一个$msg参数,里面包含该条队列的详细信息 // @param:自动应答,默认:FALSE // @param:标签,默认:"" $Rmq->consume(function($msg){ // 手动应答,告诉rabbitmq已经处理了该条队列 // 如果第二个参数为TRUE,则此行代码可以不写 Rmq::ack($msg); echo $msg->body; }); ~~~ <br/> ## get - 读取单条队列 ~~~ $msg = $Rmq->get(); ~~~ --- <br/> **完整示例** <br/> #### 普通队列写入 ~~~ use \api\Rmq; // 绑定交换机和队列 rmq('demo', 'demo_queue')->add([ 'txt' => 'content' ]); // 在项目配置文件 Rmq.php中可以配置默认的交换机和队列,采用默认配置可以使用以下更加简化的写法 rmq()->add([ 'txt' => 'content' ]); ~~~ <br/> #### 批量写入队列 ~~~ // 添加队列时指定第二个参数为TRUE,表示批量写入 $rmq = rmq(); $rmq->add([ 'txt' => 'content' ], TRUE); $rmq->publish(); ~~~ <br/> #### 延迟写入队列 >延迟队列使用场景: > >新用户使用1天这种功能,可以在开通后写入一个延迟1天的队列,1天后消费端消费到这条队列,把该用户的授权信息删除 ~~~ use \api\Rmq; // 创建交互机时指定第二个参数为TRUE,表示是延迟交换机 $Rmq = Rmq::exchange( 'delayed', TRUE )->queue('demo_queue')->bind(); // 指定第三个参数为具体的延迟秒数 $Rmq->add([ 'txt' => 'content' ], FALSE, 3600); ~~~ <br/> #### 普通消费 ~~~ rmq()->consume(function($msg){ // 写入队列的数据 $data = json_decode($msg->body, TRUE); }); ~~~ <br/> #### 消费后自动应答 ~~~ rmq()->consume(function($msg){ // 写入队列的数据 $data = json_decode($msg->body, TRUE); }, TRUE); ~~~