mac-air上安装 rabbitmq 并简单使用

简介:

  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

效果:

  

 

posted @ 2019-08-14 10:01  阿飞afei  阅读(918)  评论(0编辑  收藏  举报