RabbitMq的安装调试记录

环境

系统

Distributor ID: Deepin

Description: Deepin 15.4

Release: 15.4

Codename: unstable

php

PHP 7.0.16-3 (cli) (built: Feb 22 2017 10:03:06) ( NTS )

用途

任务分发和一些耗时异步操作

##安装队列服务 因为是类debian环境,首选apt安装

sudo apt install rabbitmq-server

安装完成查看一下服务

sudo service  rabbitmq-server status

如果未启动,手动令其启动

sudo service  rabbitmq-server start

安装php驱动

sudo apt install php-amqp

成功后大概需要重新载入一下apache配置

sudo systemctl reload apache2

开启rabbitmq的web监控界面

sudo /usr/sbin/rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
  mochiweb
  webmachine
  rabbitmq_web_dispatch
  amqp_client
  rabbitmq_management_agent
  rabbitmq_management

Applying plugin configuration to rabbit@xxx-PC... started 6 plugins.

浏览器打开http://localhost:15672

web监控界面

网上找一个小demo,改成一个吟诗程序,跑跑

<?php
/**
生产者示例,逐行读取标准输入并发布到队列,并提供了结束口令over
*/

class publish{
    protected $conn_args = array(
                'host' => 'localhost',
                'port' => '5672',
                'login' => 'guest',
                'password' => 'guest',
                'vhost'=>'/'
            );
    protected $e_name = 'e_linvo'; //交换机名
    //$q_name = 'q_linvo'; //无需队列名
    protected $k_route = 'key_1'; //路由key

    protected $conn;

    protected $channel;
    public function __construct()
    {
        $this->conn = new AMQPConnection($this->conn_args);
        if (!$this->conn->connect()) {
            die("Cannot connect to the broker!\n");
        }
        $this->channel = new AMQPChannel($this->conn);
        //创建交换机对象
        $this->ex = new AMQPExchange($this->channel);
        $this->ex->setName($this->e_name);

    }

    public function poem()
    {
        $keyin = trim(fgets(STDIN));
        if($keyin !== 'over'){
            $this->ex->publish($keyin, $this->k_route);
            $this->poem($this->ex);
        }    
    }

    public function __distruct()
    {
        $this->conn->disconnect();    
    }

}

$h = new publish;
$h->poem();

<?php
/*************************************
* PHP amqp(RabbitMQ) Demo - consumer
* Author: Linvo
* Date: 2012/7/30
*************************************/
/**
消费者,接收队列消息并输出
*/
//配置信息
$conn_args = array(
    'host' => 'localhost',
    '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应答
}

用终端运行消费者

php consumer.php 
Exchange Status:1
Message Total:0
Queue Bind: 1
Message:

用终端运行生产者

php publish.php 

效果如下

测试一下

转载于:https://my.oschina.net/inuxor/blog/1186792

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值