文档章节

RabbitMq的安装调试记录

inuxor
 inuxor
发布于 2017/07/06 16:49
字数 595
阅读 29
收藏 0

环境

系统

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 

效果如下

测试一下

© 著作权归作者所有

inuxor

inuxor

粉丝 33
博文 25
码字总数 14592
作品 0
技术主管
私信 提问
初学Python——RabbitMQ的安装

记录踩坑之路,本篇文章主要摘抄自CSDN博客https://blog.csdn.net/weixin_39735923/article/details/79288578 Windows10环境下安装RabbtiMQ的步骤 第一步:下载并安装Erlang 原因:RabbitMQ服...

学霸初养成
2018/07/15
0
0
我的RabbitMQ的学习成果

背景 在研发分布式事务的最终一致性事务模式时,使用了RabbitMQ。 在这之前也接触过RabbitMQ,但没有特别深入的去了解它的特性与原理。这次决定系统的学习一次,所以业余时间阅读大神们的书籍...

XuePeng77
04/15
263
0
【原创】rabbitmq-service用户手册(翻译)

为了方便工作中使用,周末抽空对 rabbitmq-service 用户手册进行了翻译,鉴于自己水平有限,翻译中难免有纰漏产生,如果疑问,欢迎指出探讨。 官方原文:http://www.rabbitmq.com/man/rabbi...

摩云飞
2012/11/12
904
0
RabbitMQ使用过程中遇到的坑

LZ在研究安装部署使用RabbitMQ过程中遇到了很多坑,特此记录,以便使大家少走弯路。LZ是在Windows环境中部署的,Linux类似。 RabbitMQ由于是基于Erlang开发的,因此安装之前需要先安装Erlan...

lynnlovemin
2017/05/11
0
0
在CentOS上安装rabbitmq

转自:http://flyingdutchman.iteye.com/blog/1887283 这文章写得很好,除了安装软件编译时间比较长之外,安装这个几乎没出现什么错误。现在去配置下rabbitmq,马上就可以使用了。 在本节中我...

mac_zhao
2014/09/28
207
0

没有更多内容

加载失败,请刷新页面

加载更多

关于运维,该怎么决定它的方向,这个似工作又似兴趣的存在

我之前主要从事网络、桌面、机房管理等相关工作,这些工作使我迷惘,这应该是大多数运维人都经历过的过程; 18年国庆,我从国内前三的消费金融公司裸辞,下海创业,就是想要摆脱这样的困境。...

网络小虾米
23分钟前
5
0
Java Timer的用法

Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("11232"); } }, 200000 , 1000); public void schedule(TimerTask task, long delay......

林词
26分钟前
5
0
使用js动态加载外部js文件以及动态创建script脚本

动态脚本指的是在页面加载时不存在,但将来的某一时刻通过修改该DOM动态添加的脚本。和操作HTML元素一样,创建动态脚本也有两种方式:插入外部文件和直接插入JavaScript代码。 动态加载外的外...

Bing309
34分钟前
3
0
从零开始入门 K8s | Kubernetes 网络概念及策略控制

作者 | 阿里巴巴高级技术专家 叶磊 一、Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法。大家知道 Kubernetes 对于网络具体实现方案,没有什么限制,也没有给出特...

阿里巴巴云原生
38分钟前
3
0
天气获取

本文转载于:专业的前端网站➨天气获取 $.get("http://wthrcdn.etouch.cn/WeatherApi", { citykey: cityCode }, function (d) { //创建文档对象 var parser = new ......

前端老手
38分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部