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文件

先讓消費者跑起來:

 

然後再跑生產者:

 

現在生產者已經在生產了,切換到第一個界面,會看到消費者不斷的將生產者產生的消息取出來:

 

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