RabbitMQ消息队列-一对一模式
- 2018-12-10 21:00:00
- 赵勤松 原创
- 3032
一对一模式,以图片形式,可表示为
生产者生成消息,置入消息队列的最前端,而消息者则从消息队列的最末尾读取消息,这就是简单模式下的消息队列处理方式。
下面以ThinkPHP下的代码来展示一下处理过程。
创建一个控制器类MQSimple,其对应的类文件MQSimple.php中的代码如下
<?php
/**
* Created by PhpStorm.
* User: zhaoqinsong
* Date: 2018/12/10
* Time: 3:44 PM
*/
namespace app\msq\controller;
class MQSimple
{
var $msq_connect;
var $msq_channel;
public function __construct(App $app)
{
parent::__construct($app);
$this->msq_connect = new AMQPStreamConnection("localhost", 5672, "phpmsq", "123456");
$this->msq_channel = $this->msq_connect->channel();
$this->msq_channel->queue_declare("simple", false, true, false, false); // 生成一个持久化消息队列
}
public function index()
{
echo "rabbitmq of test";
}
public function mq_send() {
// 向消息队列simple发送消息
$msg = new AMQPMessage("Hello World");
$this->msq_channel->basic_publish($msg, "", "simple");
}
public function mq_recv() {
// 处理消息队列simple中的消息
$callback = function($msg) {
$msg = $msg->body;
echo "recv:$msg\n";
};
$this->msq_channel->basic_consume("simple", "", false, true, false, false, $callback);
while ($this->msq_channel->callbacks) {
$this->msq_channel->wait();
}
}
public function __destruct()
{
$this->msq_channel->close();
$this->msq_connect->close();
}
}
指定路由,设定/simple/send指向此类的mq_send方法,将/simple/recv指向此类的mq_recv方法。
在命令行下,先启动接收消息队列的程序(切换到ThinkPHP框架的根目录下)
# php public/index.php /simple/recv后面再开启一个连接,启动发送消息的程序(同样需要切换到ThinkPHP框架的根目录下)
# php public/index.php /simple/send这时,查看接收消息队列的程序,可看到
# php public/index.php /simple/recv recv:Hello World也就是发送的消息被正确接收了,再看消息列表的状态
# rabbitmqctl list_queues Timeout: 60.0 seconds ... Listing queues for vhost / ... simple 0simple消息队列中的消息已经被处理完毕。
文章分类
联系我们
| 联系人: | powereye |
|---|---|
| Email: | zqs@someapp.cn |
| QQ: | 1134846 |
| 微信: | powereye |
