美文网首页
PHP RabbitMQ Work模式(多个消费者) --- 2

PHP RabbitMQ Work模式(多个消费者) --- 2

作者: 一位先生_ | 来源:发表于2022-05-05 02:29 被阅读0次

    PHP RabbitMQ Work模式,就是配置多个消费者消费同一个队列的消息,可以提高消息的并发处理速度,架构如下图

    image.png

    提示:无论使用RabbitMQ那种工作模式,每个队列都支持多个消费者,同一个队列,一条消息只会被其中一个消费者处理。

    1.前置教程

    请先阅读下面章节,了解相关知识

    2.PHP实现多个消费者

    PHP因为自己本身不支持多线程、协程之类的并发技术,通常使用多进程方式实现并发处理,这里使用多进程模式实现多个消费者并发消费队列内的消息。

    2.1.手动启动多个进程

    要实现多进程,最简单的办法就是手动运行多次PHP命令即可。
    例如:
    上一个章节中的消费者脚本为:recv.php

    我们可以打开多个shell窗口重复执行消费者脚本即可

    # 下面启动两个消费者
    # shell窗口1
    php recv.php
    
    # shell窗口2
    php recv.php
    
    

    也可以这样:

    # shell窗口1
    php recv.php &
    php recv.php &
    
    

    在同一个shell窗口内,将脚本放到后台运行

    说明:这种手动启动多个php脚本的方式实现多个消费者,缺点就是进程不好维护,没有进程监控,如果进程挂了,不会自动重启。

    2.2.Supervisor实现多进程

    Supervisor 是 Linux 操作系统下中的一个进程监控器,通过Supervisor可以监控php进程,如果php进程挂了会自动重启,也可以配置进程的并发数,这样可以轻松实现多个消费者并发处理消息。

    下面以Ubuntu为例,其他Linux类似

    安装supervisor

    sudo apt-get install supervisor
    
    

    配置 Supervisor

    Supervisor 的配置文件通常位于 /etc/supervisor/conf.d 目录下。在该目录中,你可以创建任意数量的配置文件,用来告诉supervisor 怎么监控我们的进程。例如,创建一个rabbitmq-worker.conf 文件, 用来监控我们的消费者进程。

    例子:
    文件: rabbitmq-worker.conf

    [program:rabbitmq-worker]
    process_name=%(program_name)s_%(process_num)02d
    command=php recv.php
    autostart=true
    autorestart=true
    user=root
    numprocs=10
    redirect_stderr=true
    stdout_logfile=/var/log/worker.log
    
    

    参数说明:

    • process_name - 进程名字定义,可以随便命名, 这里用了两个变量program_name(进程名)和process_num(进程编号)
    • command - 我们需要运行的命令
    • autostart - 是否开机启动
    • autorestart - 是否自动重启
    • user - 使用哪个系统账号运行命令
    • numprocs - 进程并发数,打算启动几个进程
    • stdout_logfile - 运行日志文件保存在哪里

    相关文章

      网友评论

          本文标题:PHP RabbitMQ Work模式(多个消费者) --- 2

          本文链接:https://www.haomeiwen.com/subject/sqifsrtx.html