资讯专栏INFORMATION COLUMN

centos 下安装RabbmitMQ+PHP RabbmitMQ应用

simpleapples / 1115人阅读

摘要:你或许在思考数据分发无阻塞作业或者消息推送。所有的这些模式,都是消息队列的一部分。这部分代码可以改写应用作简单的异步队列任务的场景,但到了高并发高可用需求下就要进行额外的一些处理。在之后的文章中我会讲到的竞争消费模式和的用法。

你或许在思考数据分发、无阻塞作业或者消息推送。或者你想要进行发布/订阅,异步任务,工作队列。所有的这些模式,都是消息队列的一部分。
1.安装RabbmitMQ
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.8/rabbitmq-server-3.6.8-1.el6.noarch.rpm

获取rpm ,安装的时候会发现缺少依赖

安装依赖erlang

wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
yum install erlang

注意不要用epel的源直接yum安装,epel源的erlang版本太低
安装依赖socat

yum install socat

最后

rpm -Uvh rabbitmq-server-3.6.8-1.el6.noarch.rpm
2.php的RabbmitMQ库
{
  "require": {
      "php-amqplib/php-amqplib": "2.6.*"
  }
}
comoser install
3.php+RabbmitMQ helloworld
//send.php
require_once __DIR__ . "/vendor/autoload.php";
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;
$connection = new AMQPStreamConnection("localhost", 5672, "guest", "guest");
$channel = $connection->channel();
$channel->queue_declare("hello", false, false, false, false);

$msg = new AMQPMessage("Hello World!");
$channel->basic_publish($msg, "", "hello"); //发送一个消息到hello频道

echo " [x] Sent "Hello World!"
";
$channel->close();
$connection->close();
//receive.php
require_once __DIR__ . "/vendor/autoload.php";
use PhpAmqpLibConnectionAMQPStreamConnection;
$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", "
";
$callback = function($msg) {
  echo " [x] Received ", $msg->body, "
";
};

//接收hello频道的消息
$channel->basic_consume("hello", "", false, true, false, false, $callback);

while(count($channel->callbacks)) {
    $channel->wait();
}
4.运行

首先运行起来rabbmitMQ server

service rabbmitmq-server start

挂起receive.php接收消息处理

php receive.php

发送消息

##另起一个窗口执行
php send.php

以上代码就构建了一个简单的消息队列


消息从send.php 生产(p) 进入队列 交由 消费者(c)

注意:当关闭了命令行窗口receive.php 进程将会结束,这个时候就需要借助
supservisor 来将receive.php 脚本后台运行。这部分代码可以改写应用作简单的异步队列任务的场景,但到了高并发高可用需求下就要进行额外的一些处理。在之后的文章中我会讲到rabbmitMQ的竞争消费模式和superverisor的用法。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31028.html

相关文章

  • CentOS 生产环境配置

    摘要:最新的已经释出,更新了,非常赞。不过目前尚未释出,等待中。初始配置对于一般配置来说,不需要安装仓库,本文主要在于希望跟随的配置流程,紧跟红帽公司对于服务器的配置说明。 原文来自静雅斋,转载请注明出处。 生产环境和开发环境测试环境都不一样,所以配置都不能随意,对于大多数情况来说,RHEL 绝对是一个最佳选择,除了最稳定的内核发布和最全的驱动支持,还能享受到 RHEL 10 年生命周期中 ...

    daydream 评论0 收藏0
  • LNMP环境搭建(三):PHP

    摘要:安装扩展前面在设置了拓展的安装路径,于是此处已自动将加入拓展目录中,只要在,添加即可查看是否安装成功安装扩展根据版本选择对应的查看是否安装成功相关文章环境搭建一环境搭建二环境搭建三 安装的基本步骤官方文档都有说明:PHP官网安装文档 编译安装 依赖环境 这一步实际上已经在:LNMP环境搭建(二):Nginx上完成了 [root@localhost ~]# yum -y inst...

    malakashi 评论0 收藏0
  • 使用dockerfile 部署lnmpr环境

    摘要:且容器的创建和停止都十分快速,几乎跟创建和终止原生应用一致。命令是编写之后使用的。如果是在一个不支持的平台上运行或者不希望在中运行,也可以使用格式的指令环境变量这个环境亦是用来表明镜像模板最后的更新时间容器添加卷。 该文章为学习docker 笔记一 docker 简介 Docker 是基于GO语言实现的开源容器项目,现在主流的Linux系统都支持Docker,Docker 的构想是想要...

    HitenDev 评论0 收藏0

发表评论

0条评论

simpleapples

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<