如何通过PHP代码实例详细解析RabbitMQ消息队列的6大应用模式?

更新于
2026-09-27 12:30:45
1阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1377个文字,预计阅读时间需要6分钟。

如何通过PHP代码实例详细解析RabbitMQ消息队列的6大应用模式?

目录 + RabbitMQ + 6种工作模式 + 安装 + 6种模式 + 最后 + RabbitMQ + 6种工作模式 + 对RabbitMQ 6种工作模式(简单模式、工作模式、订阅模式、路由模式、主题模式、RPC模式)进行场景和参数讲解,PHP代码

目录
  • RabbitMQ 6种工作模式
    • 安装
    • 6种模式
  • 最后

    RabbitMQ 6种工作模式

    对RabbitMQ 6种工作模式(简单模式、工作模式、订阅模式、路由模式、主题模式、RPC模式)进行场景和参数进行讲解,PHP代码作为实例。

    安装

    客户端实现:添加扩展,执行composer.phar install命令

    { "require": { "php-amqplib/php-amqplib": ">=3.0" } }

    引入包

    require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage;

    建立一个链接,

    # 链接服务 $connection = new AMQPStreamConnection('127.0.0.1', 5672, 'stark', '1990@stark'); $channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false); $msg = new AMQPMessage('Hello World!'); $channel->basic_publish($msg, '', 'hello'); echo " [x] Sent 'Hello World!'\n"; # 关闭信道和链接 $channel->close(); $connection->close();

    6种模式

    1.简单模式

    简单模式是最简单的使用方式,P代表生产者,C代表消费者,红色的代表队列,执行过程生产者发送消息到队列,右面的消费者消费消息,需要注意的是这里没有交换机。

    生产者代码(PHP)

    # 声明队列 $queueName = 'MqName'; $channel->queue_declare($queueName, false, false, false, false);

    queue_declare 参数说明:

    • 队列名
    • 检测队列是否存在,true只检测不创建,false会创建
    • 是否持久化队列,true持久化
    • 是否私有队列 true代表私有
    • 当消费者断开后,队列是否自动删除

    # 创建AMQP消息类型 $msg = new AMQPMessage($data, array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT) );

    AMQPMessage 参数说明: 1.消息体 2.是否持久化

    $channel->basic_publish($msg, '', $queueName);

    basic_publish参数详解:

    • 发送内容
    • 交换机名称,简单模式没有使用交换机
    • 队列名称

    消费者代码:

    $channel->basic_consume('hello', '', false, true, false, false, $callback); # 阻塞队列,做监听 while ($channel->is_open()) { $channel->wait(); }

    basic_consume 参数说明:

    • 队列名
    • 消费者标签
    • AMQP标准
    • 是否自动应答 ack true 自动应答,false应答
    • 是否排他
    • ?
    • 回调函数

    2.工作模式

    它由一个生产者发送在队列中,work队列会分配消息给不同的消费者,让每个消费者接收到不同的消息。

    工作模式的场景特别适合集群模式的异步处理,最大程度发挥每一台服务器的性能。

    3.订阅模式

    从订阅模式开始就使用了交换机,订阅模式使用了广播类型的交换机,它会让每个队列的消息都是一样的。

    生产者把消息发送给交换机,交换机把消息发送给和它绑定的队列,让消费者来消费,需要强调的是绑定的队列获得的消息是一模一样的,订阅模式就是让所有的消费者获得相同的消息。

    订阅模式使用场景,天气、微博的订阅,收费文章的订阅等等。

    生产者实现:

    $channel->exchange_declare('logs', 'fanout', false, false, false); # 绑定交换机和队列 $channel->queue_bind($queue_name, 'logs');

    交换机参数详解:

    • 交换机名
    • 交换机类型
    • 检查是否存在
    • 是否持久化
    • 是否自动删除

    $channel->basic_publish($msg, '这里是交换机的名字', $queueName);

    消费者和生产者一样,先绑定交换机:

    4.路由模式

    路由模式使用direct定向类型的交换机,生产者发送一个消息到交换机,交换机根据发送来的路由键发送到相匹配的队列中,来和队列绑定的消费者进行消费。

    订阅模式和路由模式的区别,订阅模式无条件的把消息发送给所有的消费者,每一个消费者收到的消息都是一样的,而路由模式对消息进行筛选发送给对应的消费者队列。

    5.主题模式

    主题模式采用的事topic的交换机,通过通配符进行匹配,通配符主要有*和#。

    6.RPC模式

    如何通过PHP代码实例详细解析RabbitMQ消息队列的6大应用模式?

    RabbitMQ的RPC模式,支持生产者和消费者不在同一个系统中,即允许远程调用的情况。通常,消费者作为服务端,放置在远程的系统中,提供接口,生产者调用接口,并发送消息。

    RPC模式是一种远程调用的模式,因为需要http请求,因此速度比系统内部调用慢。而且rpc模式下,通常不易区分哪些是来自外部的请求,哪些是内部的请求,导致整体速度较慢。因此,不能滥用rpc模式。

    最后

    后面的3个模式不做详细的代码讲解了,可以看参考官网,实现起来都是差不多的。

    • 官网:www.rabbitmq.com/getstarted.…

    以上就是以PHP代码为实例详解RabbitMQ消息队列中间件的6种模式的详细内容,更多关于RabbitMQ模式php实例的资料请关注自由互联其它相关文章!

    本文共计1377个文字,预计阅读时间需要6分钟。

    如何通过PHP代码实例详细解析RabbitMQ消息队列的6大应用模式?

    目录 + RabbitMQ + 6种工作模式 + 安装 + 6种模式 + 最后 + RabbitMQ + 6种工作模式 + 对RabbitMQ 6种工作模式(简单模式、工作模式、订阅模式、路由模式、主题模式、RPC模式)进行场景和参数讲解,PHP代码

    目录
    • RabbitMQ 6种工作模式
      • 安装
      • 6种模式
    • 最后

      RabbitMQ 6种工作模式

      对RabbitMQ 6种工作模式(简单模式、工作模式、订阅模式、路由模式、主题模式、RPC模式)进行场景和参数进行讲解,PHP代码作为实例。

      安装

      客户端实现:添加扩展,执行composer.phar install命令

      { "require": { "php-amqplib/php-amqplib": ">=3.0" } }

      引入包

      require_once __DIR__ . '/vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage;

      建立一个链接,

      # 链接服务 $connection = new AMQPStreamConnection('127.0.0.1', 5672, 'stark', '1990@stark'); $channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false); $msg = new AMQPMessage('Hello World!'); $channel->basic_publish($msg, '', 'hello'); echo " [x] Sent 'Hello World!'\n"; # 关闭信道和链接 $channel->close(); $connection->close();

      6种模式

      1.简单模式

      简单模式是最简单的使用方式,P代表生产者,C代表消费者,红色的代表队列,执行过程生产者发送消息到队列,右面的消费者消费消息,需要注意的是这里没有交换机。

      生产者代码(PHP)

      # 声明队列 $queueName = 'MqName'; $channel->queue_declare($queueName, false, false, false, false);

      queue_declare 参数说明:

      • 队列名
      • 检测队列是否存在,true只检测不创建,false会创建
      • 是否持久化队列,true持久化
      • 是否私有队列 true代表私有
      • 当消费者断开后,队列是否自动删除

      # 创建AMQP消息类型 $msg = new AMQPMessage($data, array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT) );

      AMQPMessage 参数说明: 1.消息体 2.是否持久化

      $channel->basic_publish($msg, '', $queueName);

      basic_publish参数详解:

      • 发送内容
      • 交换机名称,简单模式没有使用交换机
      • 队列名称

      消费者代码:

      $channel->basic_consume('hello', '', false, true, false, false, $callback); # 阻塞队列,做监听 while ($channel->is_open()) { $channel->wait(); }

      basic_consume 参数说明:

      • 队列名
      • 消费者标签
      • AMQP标准
      • 是否自动应答 ack true 自动应答,false应答
      • 是否排他
      • ?
      • 回调函数

      2.工作模式

      它由一个生产者发送在队列中,work队列会分配消息给不同的消费者,让每个消费者接收到不同的消息。

      工作模式的场景特别适合集群模式的异步处理,最大程度发挥每一台服务器的性能。

      3.订阅模式

      从订阅模式开始就使用了交换机,订阅模式使用了广播类型的交换机,它会让每个队列的消息都是一样的。

      生产者把消息发送给交换机,交换机把消息发送给和它绑定的队列,让消费者来消费,需要强调的是绑定的队列获得的消息是一模一样的,订阅模式就是让所有的消费者获得相同的消息。

      订阅模式使用场景,天气、微博的订阅,收费文章的订阅等等。

      生产者实现:

      $channel->exchange_declare('logs', 'fanout', false, false, false); # 绑定交换机和队列 $channel->queue_bind($queue_name, 'logs');

      交换机参数详解:

      • 交换机名
      • 交换机类型
      • 检查是否存在
      • 是否持久化
      • 是否自动删除

      $channel->basic_publish($msg, '这里是交换机的名字', $queueName);

      消费者和生产者一样,先绑定交换机:

      4.路由模式

      路由模式使用direct定向类型的交换机,生产者发送一个消息到交换机,交换机根据发送来的路由键发送到相匹配的队列中,来和队列绑定的消费者进行消费。

      订阅模式和路由模式的区别,订阅模式无条件的把消息发送给所有的消费者,每一个消费者收到的消息都是一样的,而路由模式对消息进行筛选发送给对应的消费者队列。

      5.主题模式

      主题模式采用的事topic的交换机,通过通配符进行匹配,通配符主要有*和#。

      6.RPC模式

      如何通过PHP代码实例详细解析RabbitMQ消息队列的6大应用模式?

      RabbitMQ的RPC模式,支持生产者和消费者不在同一个系统中,即允许远程调用的情况。通常,消费者作为服务端,放置在远程的系统中,提供接口,生产者调用接口,并发送消息。

      RPC模式是一种远程调用的模式,因为需要http请求,因此速度比系统内部调用慢。而且rpc模式下,通常不易区分哪些是来自外部的请求,哪些是内部的请求,导致整体速度较慢。因此,不能滥用rpc模式。

      最后

      后面的3个模式不做详细的代码讲解了,可以看参考官网,实现起来都是差不多的。

      • 官网:www.rabbitmq.com/getstarted.…

      以上就是以PHP代码为实例详解RabbitMQ消息队列中间件的6种模式的详细内容,更多关于RabbitMQ模式php实例的资料请关注自由互联其它相关文章!