Linux下给PHP安装amqp扩展

本文介绍了在Linux下给PHP安装amqp扩张的进程,有亟待的冤家能够关注一下。

一、安装rabbitmq服务端

背景: 上面包车型地铁内容是笔者依据网络海博物院客小松的篇章
 做的退换,因为自个儿走到make
编写翻译amqp那步报错

安装librabbitmq-c和rabbitmq-codegen

# 下载0-9-1版的rabbitmq-c
git clone git://github.com/alanxz/rabbitmq-c.git
cd rabbitmq-c
# Enable and update the codegen git submodule
git submodule init
git submodule update
# Configure, compile and install
autoreconf -i && ./configure && make && sudo make install
1、安装erlang

试了三回erlang官方的包安装后,在安装rabbitmq时都报错要信任Tiggo14B02,干脆使用rabbitmq官方提供的包:https://github.com/rabbitmq/erlang-rpm
点击下载,终于不报错了。

rabbitmq官方提供安装包的手续:
1、下载后走入安装包,直接输入指令:make
2、安装进度要求3分钟左右,编写翻译进程中须求用到rpm-build和autoconf,未有安装的急需设置。安装到位后,会在目录RPMS/x86_64/下找到erlang的安装包,rpm
-ivh *** 安装就可以。

图片 1

安装pecl扩展

#下载最新的amqp扩展
wget http://pecl.php.net/get/amqp-1.0.9.tgz
tar xvzf amqp-1.0.9.tgz
cd amqp-1.0.9 && phpize
./configure --with-amqp && make && sudo make install

记得在php.ini中加入amqp扩展:

extension=amqp.so
2、安装rabbitmq

自家平昔利用rabbitmq 的rpm安装包。假若当时还报错socat找不到,下载socat
的安装包安装就能够。
瞩目:假设使用yum安装socat,需安装epel。

 

安装进程中或然会凌驾的主题素材

1、缺少libtool包

configure.ac: installing ./install-sh
configure.ac: installing ./missing
configure.ac:34: installing ./config.guess
configure.ac:34: installing ./config.sub
Makefile.am:3: Libtool library used but LIBTOOL is undefined
Makefile.am:3:
Makefile.am:3: The usual way to define LIBTOOL is to add AC_PROG_LIBTOOL
Makefile.am:3: to configure.ac and run aclocal and autoconf again.
Makefile.am: C objects in subdir but AM_PROG_CC_C_O not in configure.ac
Makefile.am: installing ./compile
Makefile.am: installing ./depcomp
autoreconf: automake failed with exit status: 1

消除办法,安装libtool,ubuntu:

sudo apt-get install libtool

其余系统相符

2、如若还应该有别的标题,接待给自家留言,小编补上

3、测验rabbitmq是还是不是安装成功
service rabbitmq-server start #开启rabbitmq
service rabbitmq-server status #查看rabbitmq状态

 

使用

<?php
//配置信息
$conn_args = array(
    'host' => '127.0.0.1',
    'port' => '5672',
    'login' => 'guest',
    'password' => 'guest',
    'vhost'=>'/'
);
//创建连接
$conn = new AMQPConnection($conn_args);
if (!$conn->connect()) {
    die('Not connected  ' . PHP_EOL);
}
// Open Channel
$channel = new AMQPChannel($conn);
// Declare exchange
$exchange = new AMQPExchange($channel);
$exchange->setName('extest');
$exchange->setType('fanout');
$exchange->declare();
// Create Queue
$queue = new AMQPQueue($channel);
$queue->setName('qutest');
$queue->declare();
// Bind it on the exchange to routing.key
$exchange->bind('qutest', 'routing.key');
$data = array(
    'Name' => 'foobar',
    'Args'  => array("0", "1", "2", "3"),
);
//生产者,向RabbitMQ发送消息
$message = $exchange->publish(json_encode($data), 'key');
if (!$message) {
    echo 'Message not sent', PHP_EOL;
} else {
    echo 'Message sent!', PHP_EOL;
}
//消费者
while ($envelope = $queue->get(AMQP_AUTOACK)) {
    echo ($envelope->isRedelivery()) ? 'Redelivery' : 'New Message';
    echo PHP_EOL;
    echo $envelope->getBody(), PHP_EOL;
}
?>

二、安装rabbitmq的php扩展

最起先报下边的那些荒谬,是因为要设置其它一个恢弘rabbitmq-c

1、安装扩大信任库####

瞩目:扩大是C写的,由于C与RabbitMQ通讯日常需求信任rabbitmq-c库(也正是librabbitmqState of Qatar,所以编写翻译扩充前须求先装注重库。不一样版本的扩充,对php版本和librabbitmq包容性不相同。
rabbitmq-c依赖库下载:
https://github.com/alanxz/rabbitmq-c/archive/v0.8.0.tar.gz

mkdir build && cd build # 这一步是在rabbitmq-c的根目录下创建一个build子目录
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/librabbitmq ..  # 这一步是让cmake根据../CMakeList.txt,即rabbitmq-c的根目录下的CMakeList.txt创建Makefile文件,Makefile文件会被创建到build目录中
cmake --build . # 这一步是真正的build rabbitmq-c库的,注意,不要漏掉结尾的点 '.'
make
make install

2、安装amqp扩展

amqp扩充下载:
http://pecl.php.net/get/amqp-1.9.0.tgz

tar zvxf amqp-1.9.0.tgz #解压
cd amqp-1.9.9 #打开目录

./configure --with-php-config=/usr/local/php56/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/librabbitmq

make
make install

修改php.ini

extension=amqp.so #extension_dir自己定义

重启php-fpm

service php-fpm restart #重启

如无意外,则足以在phpinfo页面看见如下所示:

图片 2

图一

configure:
error: Please reinstall the librabbitmq distribution itself or (re)install librabbitmq
development package if it available in your
system

三、监察和控制及代码测验

开发银行rabbitmq监察和控制页面

rabbitmq-plugins enable rabbitmq_management #启动监控页面插件

生产者代码 (创造三个rabbit_publisher.php的文件)
开创连接–>创立channel–>成立交流机对象–>发送新闻

<?php 
//配置信息
$conn_args = array(
    'host' => '192.168.1.93',
    '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);

//消息内容
$message = "TEST MESSAGE! 测试消息!";

//创建交换机对象
$ex = new AMQPExchange($channel);
$ex->setName($e_name);

//发送消息
//$channel->startTransaction(); //开始事务
for($i=0; $i<5; ++$i){
    echo "Send Message:".$ex->publish($message, $k_route)."n";
}
//$channel->commitTransaction(); //提交事务

$conn->disconnect();

消费者代码(成立贰个rabbit_consumer.php的文件)
开创连接–>创设channel–>创造沟通机–>成立队列–>绑定调换机/队列/路由键–>选取音信

<?php 
//配置信息
$conn_args = array(
    'host' => '192.168.1.93',
    '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应答
}

/**
 * 消费回调函数
 * 处理消息
 */
function processMessage($envelope, $queue) {
    var_dump($envelope->getRoutingKey);
    $msg = $envelope->getBody();
    echo $msg."n"; //处理消息
}

亟需在乎的地点是:
queue对象有八个章程可用以取消息:consume和get。后面一个是堵塞的,无音信时会被挂起,相符循环中选用;
膝下则是非堵塞的,取音信时有则取,无则赶回false。
测量试验截图
运营消费者:

图片 3

运行临蓐者,发新闻:

图片 4

消费者接收到信息:

图片 5

施行三个公文,再展开RabbitMQ的军事拘押中央
http://127.0.0.1:15672/

图片 6

图片 7

 

①安装rabbitmq-c-0.7.1

未有安装就能够提醒下面的不当
下载地址:
本人接收的是时尚版本0.7.1

  1. wget 
             (注意: 恐怕须要FQ卡塔尔
  2. tar zxf rabbitmq-c-0.8.0.tar.gz
  3.  
  4. cd rabbitmq-c-0.8.0.tar.gz
  5. ./configure –prefix=/usr/local/rabbitmq-c-0.8.0
  6. make && make
    install

成功今后看见如下

图片 8

 

 

②安装amqp

下载地址
本人接纳的是1.9.0

  1. wget 
  2. tar zxf amqp-1.9.0.tgz
  3. cd amqp-1.9.0.tgz
  4.  
  5. /usr/local/php/bin/phpize
  6.  
  7. ./configure –with-php-config=/usr/local/php/bin/php-config –with-amqp –with-librabbitmq-dir=/usr/local/rabbitmq-c-0.8.0

注意:这里的/usr/local/rabbitmq-c-0.8.0要跟上边rabbitmq-c安装之处一样   –with-php-config=前边是php安装路线中的php-config

  1. make && make
    install

安装成功未来记录下边包车型客车地址,配置增多php模块的时候有用

图片 9

 

③添加php模块

  1. vi /usr/local/php/etc/php.ini

丰富意气风发行图片 10

 

重启php

  1. service php-fpm restart

④检查amqp安装

用phpinfo来检查一下amqp是不是安装成功

图片 11

QQ交流群:136351212

如无非常表明,本站小说皆为原创,若要转载,必须请申明以下原作音信:
转发保留版权:小松博客» rabbitmq
php扩展amqp安装
正文链接地址:

发表评论

电子邮件地址不会被公开。 必填项已用*标注