摘要:经过了两天的rabbitMQ的理论学习,决定开始实践。本想着一个中间件的安装应该挺简单的,没想到也是大坑跌出,最终把经验记录一下
一、安装rabbitMQ
rabbitMQ(以下全部简称为rmq)是由erlang编写的,在安装rmq之前应该还要安装erlang的环境。不过在mac上由于homebrew的存在就是这一切变得很简单:
$ brew update
$ brew install rabbitmq
安装完毕后就在 /usr/local/Cellar/rabbitmq/3.5.3/ 路径下了, {PATH}/sbin/rabbitmq-server便是服务启动程序了
二、安装rabbitMQ-c
这是第一个坑,php使用amqp与rmq进行通讯,php扩展是C来写的,而这个rabbitMQ-c就是一个c与rmq通讯库,必须要安装!下面是安装命令以及资源地址:
$ git clone git://github.com/alanxz/rabbitmq-c.git
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
$ cmake --build . --target install
安装可以用cmake也可以用源码包来安装,这个随意。接下来就是一个巨坑了,花费了博主两天时间才搞定。。。真是一口老血:
# ./librabbitmq/amqp_openssl_hostname_validation.h:34:10:fatal error:'openssl/x509v3.h' file not found
#include <openssl/x509v3.h>
rmq依赖ssl进行通讯,但是make时找不到文件。试了7-8种方案,baidu...google...*,包括换资源包、从新安装openssl、换cmake进行安装等,最终问题根源与解决方案在下面:
罪魁祸首:SIP,全称 System Integrity Protection系统完整性保护,完整介绍 https://support.apple.com/zh-cn/HT204899。
TA把mac出厂的openssl严格的保护了起来,homebrew安装的openssl在编译时根本没派上用场,不想动原来的东西,又需要让新的openssl派上用场,这里需要用到link了:
$ brew link openssl
# Warning: openssl is keg-only and must be linked with --force
# Note that doing so can interfere with building software.
$ brew link openssl —force
# inking /usr/local/Cellar/openssl/1.0.2e_1... 1556 symlinks created
成功了,在回去安装一下rmq-c,可以编译过了!!!
三、安装php amqp扩展
https://github.com/php-amqplib/php-amqplib
常规的解压缩,phpize,configure ,安装,把.so文件加入php.ini配置,重启,OK!
附带config参数: –with-php-config={PATH}/php-config –with-amqp
四、使用composer安装client lib
官方教程地址:http://www.rabbitmq.com/tutorials/tutorial-one-php.html
{
"require": {
"php-amqplib/php-amqplib": ">=2.6.1"
}}
接下来就是最惊心动魄的,结合理论来实践了!
总结:
以前碰到问题解决都是写在evernote内给自己使用的,现在放到博客上会多写一些心得以供分享吧。
无论是写程序本身、组件、系统都会碰到很多问题。有些疑难杂症在面前挡着,感觉就像进入了一道迷宫,眼前有好几个可能可行的解决方案,不知道哪个才能解决问题,而汪汪每一个解决方案未必是一执行就能知道是否有效的,下面也许是更多新的分叉路,让问题变得扑朔迷离。这是没有办法的事,但一定把问题真的搞清楚,吸收变成自己的经验,即使当下很忙之后也要抽空去整理归纳,这样才能把越来越多而疑难杂症变成小问题。