Centos7环境下rabbitmq + PHP扩展安装和使用

 

一、安装erlang

由于rabbitmq是由erlang语言开发,所以需要先安装erlang

1、下载erlang文件

cd  /usr/local/
wget  http://erlang.org/download/otp_src_19.3.tar.gz
tar -zxvf otp_src_19.3.tar.gz

然后得到一个文件夹 otp_src_19.3

2、编译安装

cd  otp_src_19.3

编译,指定安装目录为 /usr/local/erlang

 ./configure --prefix=/usr/local/erlang

安装:

make
make install

安装成功之后,进入安装目录的bin目录,执行命令:

cd /usr/local/erlang/bin
./erl



出现下面信息,表示erlang安装成功,按两次Ctrl+C退出

 
Erlang/OTP 20 [erts-9.1] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]
 
Eshell V9.1  (abort with ^G)
1>

3、配置环境变量

vim /etc/profile

在文件末尾添加以下代码:

export ERLANG_DIR=/usr/local/erlang
export PATH=$PATH:${ERLANG_DIR}/bin

保存退出,

source /etc/profile

使刚刚配置的环境变量生效


二、安装rabbitmq

 

1、下载rabbitmq安装文件

cd /usr/local
wget http://www.rabbitmq.com/releases/rabbitmq-server/current/rabbitmq-server-generic-unix-3.6.14.tar.xz

待下载完成,

2、解压安装

xz -d rabbitmq-server-generic-unix-3.6.14.tar.xz
rabbitmq-server-generic-unix-3.6.14.tar.xz变成了rabbitmq-server-generic-unix-3.6.14.tar

解压缩:

tar -xvf rabbitmq-server-generic-unix-3.6.14.tar

得到 rabbitmq_server-3.6.14 目录

将此目录重命名:

mv rabbitmq_server-3.6.14 rabbitmq
cd rabbitmq/sbin

启动rabbitmq-server:

./rabbitmq-server detached

屏幕显示以下信息:

             

 RabbitMQ 3.6.14. Copyright (C) 2007-2017 Pivotal Software, Inc.
  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
  ##  ##
  ##########  Logs: /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
  ######  ##        /usr/local/rabbitmq/var/log/rabbitmq/[email protected]
  ##########
              Starting broker...
 completed with 0 plugins.


表示rabbitmq安装成功

3、配置环境变量

然后配置rabbitmq环境变量

vim /etc/profile

在文件末尾添加下面两行代码:

export RABBITMQ_DIR=/usr/local/rabbitmq
export PATH=$PATH:${RABBITMQ_DIR}/sbin

保存退出,

source /etc/profile

使刚刚配置的环境变量生效

 

4、rabbitmq启动、停止

启动:rabbitmq-server detached
停止:rabbitmqctl stop
状态:rabbitmqctl status

5、rabbitmq插件

启用插件:

rabbitmq-plugins enable rabbitmq_management

然后访问http://localhost:15672即可ip地址这里,根据自己的实际ip地址输入

 

 

6、配置远程访问

Rabbitmq登录默认账号和密码都是:guest

默认远程是不可访问的,需要配置用户权限,

添加用户:rabbitmqctl add_useradmin  admin
添加权限:rabbitmqctl set_permissions -p "/" admin".*" ".*" ".*"
修改用户角色为管理员:rabbitmqctl set_user_tags adminadministrator

然后就可以用刚刚添加的用户和账号admin进行登录了

 

7、rabbitmq常用命令

add_user        <UserName> <Password>
delete_user    <UserName>
change_password <UserName> <NewPassword>
list_users
add_vhost    <VHostPath>
delete_vhost <VHostPath>
list_vhostsset_permissions  [-p <VHostPath>] <UserName> <Regexp> <Regexp> <Regexp>
clear_permissions [-p <VHostPath>] <UserName>
list_permissions  [-p <VHostPath>]
list_user_permissions <UserName>
list_queues    [-p <VHostPath>] [<QueueInfoItem> ...]
list_exchanges [-p <VHostPath>] [<ExchangeInfoItem> ...]
list_bindings  [-p <VHostPath>]
list_connections [<ConnectionInfoItem> ...]


三、安装rabbitmqPHP扩展

 

1、先安装rabbitmq-c

cd /usr/local
wget  https://github.com/alanxz/rabbitmq-c/releases/download/v0.7.1/rabbitmq-c-0.7.1.tar.gz
tar -zxvf rabbitmq-c-0.7.1.tar.gz
cd rabbitmq-c-0.7.1/
./configure --prefix=/usr/local/rabbitmq-c
make
make install

2、安装amqprabbitmqPHP扩展)

cd  /usr/local
wget https://pecl.php.net/get/amqp-1.9.3.tgz
tar -zxvf amqp-1.9.3.tgz
cd amqp-1.9.3
phpize
 
./configure 
--with-php-config=/usr/local/php/bin/php-config
--with-librabbitmq-dir=/usr/local/rabbitmq-c
 
make
make install

安装成后得到扩展目录:/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

将目录下的amqp.so加到php配置文件:

vim /usr/local/php/etc/php.ini

在文件末尾加上下面一行代码:

extension = amqp.so

保存退出,重启php,看到phpinfo的页面多了amqp一栏

 


四、rabbitmq+PHP代码实践

 

编辑生产者php文件producer.php

<?php
 
/**
 * 生产者
 */
 
//配置信息
$conn_args = array(
    'host' => '127.0.0.1',
    'port' => '5672',
    'login' => 'admin',
    'password' => 'admin',
    'vhost' => '/'
);
$e_name = 'e_ashine';//交换机名
$k_route = 'ashine_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);
 
//发送消息
for ($i = 0; $i < 500000000000; $i++) {
    //消息内容
    $message = "now time is: " . date('Y-m-d H:i:s') . '.';
    echo "Send Message:" . $ex->publish($message, $k_route) . "\n";
    sleep(5);
}
$conn->disconnect();
 
?>


编辑消费者php文件consumer.php

<?php
/*
*消费者
*/
 
//配置信息
$conn_args = array(
    'host' => '127.0.0.1',
    'port' => '5672',
    'login' => 'admin',
    'password' => 'admin',
    'vhost' => '/'
);
 
$e_name = 'e_ashine';//交换机名
$q_name = 'q_ashine';//队列名
$k_route = 'ashine_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->declareExchange() . "\n";
 
//创建队列
$q = new AMQPQueue($channel);
$q->setName($q_name);
$q->setFlags(AMQP_DURABLE);//持久化
echo "Message Total:" . $q->declareQueue() . "\n";
 
//绑定交换机与队列,并指定路由键
echo 'Queue Bind:' . $q->bind($e_name, $k_route) . "\n";
 
//阻塞模式接收信息
echo "Message:\n";
 
while (True) {
    $q->consume('processMessage');
}
$conn->disconnect();
 
//处理消息回调函数
function processMessage($envelope, $queue)
{
    $msg = $envelope->getBody();
    echo $msg . "\n";//处理消息
    $queue->ack($envelope->getDeliveryTag());
}
 
?>

编辑代码完成在之后,用两个窗口,分别执行生产者和消费者的php文件

先让消费者跑起来:

 

然后再跑生产者:

 

现在生产者已经在生产了,切换到第一个界面,会看到消费者不断的将生产者产生的消息取出来:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章