简介:

  1. brew 安装 rabbitmq,docker安装rabbitmq
  2. 安装官方php-amqp 扩展
  3. 简单使用样例(发送10次helloworld)

内容:

1

1.1 docker 安装 rabbitmq(前提是系统已安装docker)

编写docker-compose.yml文件内容

version: '3'
services:
rabbitmq: # https://hub.docker.com/_/rabbitmq/
image: rabbitmq:3.7.7-management-alpine
hostname: myrabbitmq
ports:
- "5672:5672" # mq port
- "15672:15672" # admin port

启动:

 docker-compose up -d rabbitmq

显示如下安装成功:

1.2 也可通过 brew方式安装 rabbitmq

brew install rabbitmq

显示如下安装成功。

如访问 http://127.0.0.1:15672 未出现预期页面,可能未启动服务,执行如下命令启动。

brew services start rabbitmq

访问正常如下,默认账号密码为: guest guest。

登录后页面。

2安装官方php-amqp 扩展

未安装php-amqp扩展,或者扩展安装失败,执行php代码会出现如下提示。

安装rabbitmq-c。

brew install rabbitmq-c

下载官方php-amqp 扩展。rabbitmq 是amqp协议的开源实现。

curl 'http://pecl.php.net/get/amqp-1.9.3.tgz' -o amqp-1.9.3.tgz

解压下载包。进入源码根目录。执行如下命令。

phpize

--with-librabbitmq-dir这个需要修改为你环境rabbitmq-c的安装地址,brew 安装成功是最后会出现此安装目录信息。 
--with-php-config这个配置为你环境的php-config地址
./configure --with-php-config=/usr/local/Cellar/php@5.6/5.6.39/bin/php-config -with-amqp --with-librabbitmq-dir=/usr/local/Cellar/rabbitmq-c/0.9.0
make && make install

make成功,会出现如下信息。

添加.so文件至php.ini文件。

重启php-fpm  nginx。

打印phpinfo()。显示如下,则安装成功。

3 官方样例

https://www.rabbitmq.com/tutorials/tutorial-one-php.html

例子:发送10次hello world

composer.json

{
"require": {
"php-amqplib/php-amqplib": ">=2.6.1"
}
}

引入包

composer install

编写消费者代码:

receive.php

<?php
/**
* Created by Afei.
* User: feiwang
* Date: 2019-08-15
* Time: 21:00
*/
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection; $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false); echo " [*] Waiting for messages. To exit press CTRL+C\n"; $callback = function ($msg) {
echo ' [x] Received ', $msg->body, "\n";
};
$channel->basic_consume('hello', '', false, true, false, false, $callback);
while ($channel->is_consuming()) {
$channel->wait();
}
$channel->close();
$connection->close();

消息生产者代码:

send.php

<?php
/**
* Created by Afei.
* User: feiwang
* Date: 2019-08-15
* Time: 20:55
*/
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage; $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false);
for ($i=0;$i<10;$i++){ $m = 'Hello World! time now:'.date("H:i:s",time())." ".$i;
$msg = new AMQPMessage($m);
$channel->basic_publish($msg, '', 'hello');
echo $m."\n";
} $channel->close();
$connection->close();

先执行 php  receive.php

再执行 php send.php

效果:

  

最新文章

  1. CSharpGL(31)[译]OpenGL渲染管道那些事
  2. [LeetCode] Remove Linked List Elements
  3. xml配置文件的读写
  4. PetaPoco 使用总结(一)
  5. SevenZip.pas BUG修改版 - 20160613
  6. Greedy:Radar Installation(POJ 1328)
  7. hdu 4240 Route Redundancy 最大流
  8. 252. Meeting Rooms
  9. VS2013 :IntelliSense: 不允许使用不完整的类型
  10. 用于显示上个月和下个月_PHP
  11. 解决nginx上传模块nginx_upload_module传递GET参数
  12. 由一个LED闪烁问题发现的MTK的LED driver中存在的问题
  13. 推荐一篇很好的介绍wpf dependency property的文章
  14. TestNG操作详解
  15. 轻松几句搞定【Javascript中的this指向】问题
  16. JavaScript中的typeof
  17. Mac 系统下创建可双击执行文件,cd到执行文件当前目录
  18. halcon形态学运算
  19. [算法专题] Binary Tree
  20. Html5 标签一(文本)

热门文章

  1. js点击按钮为元素随机字体颜色和背景色
  2. H3C HDLC协议使用限制
  3. python进阶之异常处理
  4. vue v-for循环中key属性的使用
  5. java 九个预定义Class对象
  6. mysql去重, 把url重复且区为空的中去掉、统计重复数据、、结果集去重合并成一行
  7. P1048 数组中的逆序对
  8. 2019-8-31-git-上传当前分支
  9. hdu 2454 Degree Sequence of Graph G(可简单图化判定)
  10. 游戏《Minecraft》或其他应用程序 实现 自动更新 客户端版本