由于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> ...]
三、安装rabbitmq的PHP扩展
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、安装amqp(rabbitmq的PHP扩展)
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文件
先让消费者跑起来:
然后再跑生产者:
现在生产者已经在生产了,切换到第一个界面,会看到消费者不断的将生产者产生的消息取出来: