给PHP安装amqp扩展
有史以来最坑爹的一次扩展安装,不晓得诸位有没有尝试过…………各种报错啊!有木有?!¥#@%%&*……
捣鼓半天,只编译了个0.1.x的扩展版本,瞅了下,擦,函数少的可怜啊- -|||
不行,继续~
经过一天的努力,老天总算开眼了,赶紧总结下吧~
----------------------------------------------- 我是分割线 ---------------------------------------------------
AMQP――高级消息队列协议,目前比较有名气的实现大概就是大名鼎鼎的RabbitMQ了。
(不了解的童鞋先看下我这篇转载吧:《[RabbitMQ+Python入门经典] 兔子和兔子窝》)
PHP扩展当然还是官方推荐的好了。OK,就它了 http://php.net/manual/en/book.amqp.php
To install the AMQP PHP extension, you must first install the ? librabbitmq library. You will need the 0-9-1 version of the rabbitmq-c client library, linked to the rabbitmq-codegen version that corresponds to the version of the broker you are using. Use the following steps to download and install the library:
# Download the rabbitmq-c library @ version 0-9-1
hg clone http://hg.rabbitmq.com/rabbitmq-c/rev/b01825ecc112 rabbitmq-c
cd rabbitmq-c
# Add the codegen requirement. To find the full list, go here: http://hg.rabbitmq.com/rabbitmq-codegen/tags
# and copy the URL for the appropriate broker version.
hg clone http://hg.rabbitmq.com/rabbitmq-codegen/rev/16bbcb711380 codegen
# Configure, compile and install
autoreconf -i && ./configure && make && sudo make install
扩展是C写的,由于C与RabbitMQ通信一般需要依赖rabbitmq-c库(也就是librabbitmq),所以编译扩展前需要先装依赖库。好吧,那就按要求装吧~
原文是用hg工具,需要装mercurial(一个轻量级的版本控制系统),这里就不介绍了,我们还是用传统的方法。
首先,到这里下载rabbitmq-c的v0.2版:https://github.com/alanxz/rabbitmq-c/tags OR 直接shell:
wget https://github.com/alanxz/rabbitmq-c/tarball/0.2
tar zxvf 0.2
cd alanxz-rabbitmq*
(为什么0.2版?好吧,我也不知道,总之它的各版本兼容性非常不好,经过我屡试屡败屡败试……发现0.2版还算顺利 - -)
接着,到这里下载最新版的codegen配件:https://github.com/rabbitmq/rabbitmq-codegen/downloads ,OR 直接shell:
wget https://github.com/rabbitmq/rabbitmq-codegen/tarball/master
tar zxvf master
mv rabbitmq-* codegen
(上面这步必须要把其解压,并放到rabbitmq-c的目录中的codegen目录中,也就是上面最后那步做的。)
按照手册介绍,先进行:
autoreconf -i
如果你一切顺利,没有报错,那么恭喜了!后面则是常规操作:
./configure && make && make install
如果仍未报错,哇塞,我只能说你NB!可以直接进行扩展编译了。
不过大部分情况下你或许和我一样遇到各种各样报错信息,那么后面我们再说,这里先把编译扩展顺带说完。
直接回到官方下载(我下载的是1.0.0版,新的版本我没事试,应该也可以的) http://pecl.php.net/package/amqp ,并编译成so文件 OR shell:
wget http://pecl.php.net/get/amqp-1.0.0.tgz
tar zxvf amqp-1.0.0.tgz
cd amqp-1.0.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp
make && make install
(/usr/local/php/bin/phpize 和 /usr/local/php/bin/php-config 为实际php所在目录,如果不清楚,可以whereis php查看。)
如果之前的步骤顺利,这步应该没什么问题,直接在php.ini中添加生成的amqp.so,重启httpd或php-cgi即可,不再赘述。
---------------------------------------------------我是分割线----------------------------------------------------
好了,如果你和我一样悲催,从autoreconf -i就开始作死地报错,那么我这里提供一些可能有用的处理方法。
autoreconf 时有可能遇到如下报错:
onfigure.ac:60: error: possibly undefined macro: AS_CASE
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:69: error: possibly undefined macro: AS_IF
configure.ac:92: error: possibly undefined macro: AC_PATH_PROGS_FEATURE_CHECK
configure.ac:97: error: possibly undefined macro: AC_MSG_RESULT
configure:2907: error: possibly undefined macro: m4_foreach_w
autoreconf: /usr/bin/autoconf failed with exit status: 1
奇怪的是,当我再次执行却报不同的错。。。
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、autoconf、automake 等
这个大家自行google下载并编译安装,常规操作,没啥说的,这里我直接yum了:
yum install libtool autoconf automake
看下libtoolize在哪:
whereis libtoolize
显示例如:libtoolize: /usr/bin/libtoolize,则可执行一下
/usr/bin/libtoolize
---------------------------------------------------我是分割线----------------------------------------------------
/usr/bin/libtoolize 时可能会报的错:
libtoolize: putting auxiliary files in `.'.
libtoolize: linking file `./ltmain.sh'
libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.ac and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
报错很明确,按照提示操作即可:
编辑:configure.ac
添加一行:AC_CONFIG_MACRO_DIR([m4])
重新执行:/usr/bin/libtoolize
编辑:Makefile.am
添加一行:ACLOCAL_AMFLAGS=-I m4
---------------------------------------------------我是分割线----------------------------------------------------
./configure 时可能会报的错:
checking location of AMQP codegen directory... configure: error: could not find AMQP spec file at "'/codegen/amqp-0.9.1.json'"
configure文件中目录与实际情况不符,虽然可以通过手动修改解决,但不建议,其实应该是rabbitmq-c和codegen的版本不匹配造成的,更换版本。
checking finding a python with simplejson installed... configure: error: could not find a python that can 'import simplejson'
很明显,该错误是由于python缺少simplejson包造成,可通过easy_install方式安装即可。
---------------------------------------------------我是分割线----------------------------------------------------
还有更多报错情况,没有一一记录,总之解决方法就是:“报错信息”+“google”!
BTW:相信搜一会儿你就会由衷得体会到:F*CK THE GFW!!!

如何在PHP中使用RabbitMQ实现分布式消息处理引言:在大规模应用程序开发中,分布式系统已成为一个常见的需求。分布式消息处理是这样的一种模式,通过将任务分发到多个处理节点,可以提高系统的效率和可靠性。RabbitMQ是一个开源的,可靠的消息队列系统,它采用AMQP协议来实现消息的传递和处理。在本文中,我们将介绍如何在PHP中使用RabbitMQ来实现分布

随着现代应用程序的复杂性增加,消息传递已成为一种强大的工具。在这个领域,RabbitMQ已成为一个非常受欢迎的消息代理,可以用于在不同的应用程序之间传递消息。在这篇文章中,我们将探讨如何在Go语言中使用RabbitMQ。本指南将涵盖以下内容:RabbitMQ简介RabbitMQ安装RabbitMQ基础概念Go语言中的RabbitMQ入门RabbitMQ和Go

如何保证消息不丢失rabbitmq消息投递路径生产者->交换机->队列->消费者总的来说分为三个阶段。1.生产者保证消息投递可靠性。2.mq内部消息不丢失。3.消费者消费成功。什么是消息投递可靠性简单点说就是消息百分百发送到消息队列中。我们可以开启confirmCallback生产者投递消息后,mq会给生产者一个ack.根据ack,生产者就可以确认这条消息是否发送到mq.开启confirmCallback修改配置文件#NONE:禁用发布确认模式,是默认值,CORRELATED:

现在越来越多的企业开始采用微服务架构模式,而在这个架构中,消息队列成为一种重要的通信方式,其中RabbitMQ被广泛应用。而在go语言中,go-zero是近年来崛起的一种框架,它提供了很多实用的工具和方法,让开发者更加轻松地使用消息队列,下面我们将结合实际应用,来介绍go-zero和RabbitMQ的使用方法和应用实践。1.RabbitMQ概述Rabbit

随着互联网时代的到来,消息队列系统变得越来越重要。它可以使不同的应用之间实现异步操作、降低耦合度、提高可扩展性,进而提升整个系统的性能和用户体验。在消息队列系统中,RabbitMQ是一个强大的开源消息队列软件,它支持多种消息协议、被广泛应用于金融交易、电子商务、在线游戏等领域。在实际应用中,往往需要将RabbitMQ和其他系统进行集成。本文将介绍如何使用sw

Golang中使用RabbitMQ实现任务分发与负载均衡的策略概述:在分布式系统中,任务的分发与负载均衡是非常重要的。一种常见的解决方案是使用消息队列来实现任务的分发与处理。本文将介绍如何使用Golang和RabbitMQ实现任务的分发与负载均衡的策略,并提供具体的代码示例。RabbitMQ简介:RabbitMQ是一个可靠、可扩展、开放源代码的消息中间件,它

简介RabbitMQ消息简介RabbitMQ的消息默认不会超时。什么是死信队列?什么是延迟队列?死信队列:DLX,全称为Dead-Letter-Exchange,可以称之为死信交换器,也有人称之为死信邮箱。当消息在一个队列中变成死信(deadmessage)之后,它能被重新被发送到另一个交换器中,这个交换器就是DLX,绑定DLX的队列就称之为死信队列。以下几种情况会导致消息变成死信:消息被拒绝(Basic.Reject/Basic.Nack),并且设置requeue参数为false;消息过期;队

一、RabbitMQ介绍RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境