IT评测·应用市场-qidao123.com

标题: PHP使用rabbitMQ [打印本页]

作者: 汕尾海湾    时间: 2024-9-11 05:06
标题: PHP使用rabbitMQ
在 PHP 中使用 RabbitMQ 通常是为了处理惩罚异步任务、队列、消息推送等场景,特别是在高并发、分布式体系中,RabbitMQ 提供了可靠的消息队列服务。RabbitMQ 是基于 AMQP 协议的消息中间件,具有高效、可靠、可扩展的特点。
下面将先容怎样在 PHP 中使用 RabbitMQ,并结合场景给出实现方法。
一、RabbitMQ 底子概念

二、安装和设置 RabbitMQ

三、PHP 使用 RabbitMQ 实例

1. 生产者发送消息

  1. <?php
  2. require_once __DIR__ . '/vendor/autoload.php';
  3. use PhpAmqpLib\Connection\AMQPStreamConnection;
  4. use PhpAmqpLib\Message\AMQPMessage;
  5. // 创建连接到 RabbitMQ 服务器
  6. $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
  7. $channel = $connection->channel();
  8. // 声明队列
  9. $channel->queue_declare('task_queue', false, true, false, false);
  10. // 发送的消息内容
  11. $data = "Hello World!";
  12. $msg = new AMQPMessage($data, array('delivery_mode' => 2)); // 设置消息为持久化
  13. // 发布消息到队列
  14. $channel->basic_publish($msg, '', 'task_queue');
  15. echo " [x] Sent 'Hello World!'\n";
  16. // 关闭连接
  17. $channel->close();
  18. $connection->close();
  19. ?>
复制代码
表明:

2. 消费者接收消息

  1. <?php
  2. require_once __DIR__ . '/vendor/autoload.php';
  3. use PhpAmqpLib\Connection\AMQPStreamConnection;
  4. // 创建连接到 RabbitMQ 服务器
  5. $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
  6. $channel = $connection->channel();
  7. // 声明队列
  8. $channel->queue_declare('task_queue', false, true, false, false);
  9. echo " [*] Waiting for messages. To exit press CTRL+C\n";
  10. // 回调函数,用于处理接收到的消息
  11. $callback = function ($msg) {
  12.     echo ' [x] Received ', $msg->body, "\n";
  13.     // 模拟任务处理
  14.     sleep(substr_count($msg->body, '.'));
  15.     echo " [x] Done\n";
  16.     // 手动确认消息已经处理
  17.     $msg->ack();
  18. };
  19. // 告诉 RabbitMQ 在同一时间不要发送多于一条消息给一个消费者
  20. $channel->basic_qos(null, 1, null);
  21. // 告诉 RabbitMQ 使用回调函数来接收消息,并手动确认消息
  22. $channel->basic_consume('task_queue', '', false, false, false, false, $callback);
  23. // 等待消息进入队列
  24. while ($channel->is_consuming()) {
  25.     $channel->wait();
  26. }
  27. // 关闭连接
  28. $channel->close();
  29. $connection->close();
  30. ?>
复制代码
表明:

3. RabbitMQ 工作队列的应用场景


四、RabbitMQ 高级特性

1. 消息恒久化

消息恒久化是为了防止 RabbitMQ 崩溃或重启时消息丢失。要做到恒久化,需要将队列和消息都设置为恒久化。

2. 延迟队列(延时任务)

通过 RabbitMQ 的 x-delayed-message 插件,可以实现延时任务。消息发送后不会立刻被消费,而是经过一段时间后才会被放入队列中消费。
3. 消息确认机制

消息确认机制是为了确保消息被正确处理惩罚,避免消息丢失。RabbitMQ 提供了手动和自动两种消息确认方式。手动确认(如上述消费者中的 ack)可以确保消息在处理惩罚失败时不会丢失。
五、总结

RabbitMQ 是一个强大且机动的消息队列体系,结合 PHP 可以实现许多高级应用场景,如异步任务、任务重试、负载均衡等。在高并发和分布式体系中,RabbitMQ 可以有效提高体系的可扩展性和稳定性。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4