PHP中的Message Queue

 Rain雨露Dew 发布于 2023-02-08 15:03

我开发了一个rest api,它接受一些数据并将其存储在消息队列(Redis List)中.现在从redis这个数据被推送到MySQL数据库.问题是客户端需要等到数据写入mysql.

我希望客户端应该等到数据写入消息队列(Redis List),并且将数据推送到MySQL的函数应该异步执行.我该怎么做 ?我的整个代码库都是用PHP编写的,所以我更喜欢用PHP编写代码.

我读过这个,但没试过.

PHP中使用Redis的分布式队列示例

我很困惑如何执行slave.php(在链接中提到).我的意思是当一条新消息到达队列时,slave.php将如何找到它.

我不想为此使用cronjob.相反,当新消息到达时,slave.php应该异步执行.怎么做?

1 个回答
  • 是的,这很可能使用Memqueue,Redis等.

    使用Redis,这就是人们可以做到的:

    这个PHP文件在获取它时将消息推送到队列中:

    /*
        Code logic
    */
    $redis->lPush("message_queue", "message 1");
    

    A slave.php使用以下方式执行"阻止弹出" brPop:

    $redis = new Redis();
    $redis->pconnect();
    
    while (true) {
        list($queue, $message) = $redis->brPop(["message_queue"], 0);
        /*
        Logic to insert $message to MySQL
        */
    }
    

    现在每当有新消息到达时,它slave.php都会抓住它并将其推送到MySQL.

    不要混淆while(true)- 上面的代码没有在无限循环中运行.在brPop异步等待直到出现在队列中的新消息.

    我正在使用PHP 5.4并连接到Redis 2.6及以上版本工作正常.更好的是,您可以拥有多个slave.php文件并分配负载.

    有关更多详细信息,请访问:http://redis.io/commands/blpop

    2023-02-08 15:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有