rabbitmq php 驱动,RabbitMq的安装调试记录

该博客介绍了如何在Deepin Linux环境下安装和配置RabbitMQ服务器,以及如何通过PHP的AMQP库创建生产者和消费者来实现消息队列。文章中给出了一个简单的例子,展示了一个读取标准输入并发布到队列的生产者脚本,以及一个接收并处理队列消息的消费者脚本。这个示例可用于执行异步任务和耗时操作。
摘要由CSDN通过智能技术生成

环境

系统

Distributor ID: Deepin

Description: Deepin 15.4

Release: 15.4

Codename: unstable

php

PHP 7.0.16-3 (cli) (built: Feb 22 2017 10:03:06) ( NTS )

用途

任务分发和一些耗时异步操作

##安装队列服务 因为是类debian环境,首选apt安装

sudo apt install rabbitmq-server

安装完成查看一下服务

sudo service rabbitmq-server status

如果未启动,手动令其启动

sudo service rabbitmq-server start

安装php驱动

sudo apt install php-amqp

成功后大概需要重新载入一下apache配置

sudo systemctl reload apache2

开启rabbitmq的web监控界面

sudo /usr/sbin/rabbitmq-plugins enable rabbitmq_management

The following plugins have been enabled:

mochiweb

webmachine

rabbitmq_web_dispatch

amqp_client

rabbitmq_management_agent

rabbitmq_management

Applying plugin configuration to rabbit@xxx-PC... started 6 plugins.

cf3f3c133523904f5cefbf453c65e8d2.png

网上找一个小demo,改成一个吟诗程序,跑跑

/**

生产者示例,逐行读取标准输入并发布到队列,并提供了结束口令over

*/

class publish{

protected $conn_args = array(

'host' => 'localhost',

'port' => '5672',

'login' => 'guest',

'password' => 'guest',

'vhost'=>'/'

);

protected $e_name = 'e_linvo'; //交换机名

//$q_name = 'q_linvo'; //无需队列名

protected $k_route = 'key_1'; //路由key

protected $conn;

protected $channel;

public function __construct()

{

$this->conn = new AMQPConnection($this->conn_args);

if (!$this->conn->connect()) {

die("Cannot connect to the broker!\n");

}

$this->channel = new AMQPChannel($this->conn);

//创建交换机对象

$this->ex = new AMQPExchange($this->channel);

$this->ex->setName($this->e_name);

}

public function poem()

{

$keyin = trim(fgets(STDIN));

if($keyin !== 'over'){

$this->ex->publish($keyin, $this->k_route);

$this->poem($this->ex);

}

}

public function __distruct()

{

$this->conn->disconnect();

}

}

$h = new publish;

$h->poem();

/*************************************

* PHP amqp(RabbitMQ) Demo - consumer

* Author: Linvo

* Date: 2012/7/30

*************************************/

/**

消费者,接收队列消息并输出

*/

//配置信息

$conn_args = array(

'host' => 'localhost',

'port' => '5672',

'login' => 'guest',

'password' => 'guest',

'vhost'=>'/'

);

$e_name = 'e_linvo'; //交换机名

$q_name = 'q_linvo'; //队列名

$k_route = 'key_1'; //路由key

//创建连接和channel

$conn = new AMQPConnection($conn_args);

if (!$conn->connect()) {

die("Cannot connect to the broker!\n");

}

$channel = new AMQPChannel($conn);

//创建交换机

$ex = new AMQPExchange($channel);

$ex->setName($e_name);

$ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型

$ex->setFlags(AMQP_DURABLE); //持久化

echo "Exchange Status:".$ex->declare()."\n";

//创建队列

$q = new AMQPQueue($channel);

$q->setName($q_name);

$q->setFlags(AMQP_DURABLE); //持久化

echo "Message Total:".$q->declare()."\n";

//绑定交换机与队列,并指定路由键

echo 'Queue Bind: '.$q->bind($e_name, $k_route)."\n";

//阻塞模式接收消息

echo "Message:\n";

while(True){

$q->consume('processMessage');

//$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答

}

$conn->disconnect();

/**

* 消费回调函数

* 处理消息

*/

function processMessage($envelope, $queue) {

$msg = $envelope->getBody();

echo $msg."\n"; //处理消息

$queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答

}

用终端运行消费者

php consumer.php

Exchange Status:1

Message Total:0

Queue Bind: 1

Message:

用终端运行生产者

php publish.php

效果如下

92428e339db1a1a4965da26afa514fd1.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值