RabbitMQ消息队列-一对一模式
- 2018-12-10 21:00:00
- 赵勤松 原创
- 2529
一对一模式,以图片形式,可表示为
生产者生成消息,置入消息队列的最前端,而消息者则从消息队列的最末尾读取消息,这就是简单模式下的消息队列处理方式。
下面以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 |