RabbitMQ中文文档PHP版本(一)--打印Hello World

2019年12月10日09:54:28

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

介绍

先决条件

本教程假定RabbitMQ 已在标准端口(5672)的本地主机上安装并运行。如果您使用其他主机,端口或凭据,则连接设置需要进行调整。

在哪里获得帮助

如果您在阅读本教程时遇到困难,可以 通过邮件列表与我们联系。

RabbitMQ是消息代理:它接受并转发消息。您可以将其视为邮局:将要发布的邮件放在邮箱中时,可以确保Mailperson先生或女士最终将邮件传递给收件人。以此类推,RabbitMQ是一个邮箱,一个邮局和一个邮递员。

RabbitMQ与邮局之间的主要区别在于,它不处理纸张,而是接收,存储和转发数据消息的二进制斑点。

RabbitMQ和一般的消息传递使用一些术语。

  • 生产仅意味着发送。发送消息的程序是生产者

  • 队列是RabbitMQ内部的邮箱的名称。尽管消息流经RabbitMQ和您的应用程序,但它们只能存储在队列中。甲队列仅由主机的存储器&磁盘限制约束,它本质上是一个大的消息缓冲器。许多生产者可以发送进入一个队列的消息,许多消费者可以尝试从一个队列接收数据。这就是我们表示队列的方式:

  • 消费与接收具有相似的含义。一个消费者是一个程序,主要是等待接收信息:

请注意,生产者,消费者和经纪人不必位于同一主机上。实际上,在大多数应用程序中却没有。一个应用程序既可以是生产者,也可以是消费者。

“Hello World”

(使用php-amqplib客户端)

在本教程的这一部分中,我们将用PHP编写两个程序。发送单个消息的生产者和接收消息并打印出来的消费者。我们将介绍php-amqplib API 中的一些细节,仅着眼于此非常简单的事情。这是消息传递的“ Hello World”。

在下图中,“ P”是我们的生产者,“ C”是我们的消费者。中间的框是一个队列-RabbitMQ代表使用者保留的消息缓冲区。

php-amqplib客户端库

RabbitMQ使用多种协议。本教程介绍了AMQP 0-9-1,这是一个开放的通用消息传递协议。RabbitMQ有许多不同语言的客户。在本教程中,我们将使用php-amqplib,并使用Composer 进行依赖项管理。

将composer.json文件添加到您的项目中:

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

前提是已安装Composer并正常运行,则可以运行以下命令:

composer.phar install

还有一个适用于WindowsComposer安装程序

现在我们已经安装了php-amqplib库,我们可以编写一些代码。

正在发送

我们将其称为消息发布者(发送者)send.php,并将消息接收者 称为receive.php。发布者将连接到RabbitMQ,发送一条消息,然后退出。

在 send.php中,我们需要包含该库并使用必要的类:

require_once __DIR__ . ‘/vendor/autoload.php‘;
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

然后我们可以创建到服务器的连接:

$connection = new AMQPStreamConnection(‘localhost‘, 5672, ‘guest‘, ‘guest‘);
$channel = $connection->channel();

该连接抽象了套接字连接,并为我们处理协议版本协商和身份验证等。在这里,我们连接到本地计算机上的代理,即本地 主机。如果我们想连接到另一台计算机上的代理,则只需在此处指定其名称或IP地址。

接下来,我们创建一个通道,该通道是用于完成工作的大多数API所在的位置。

要发送,我们必须声明要发送到的队列。然后我们可以将消息发布到队列:

$channel->queue_declare(‘hello‘, false, false, false, false);

$msg = new AMQPMessage(‘Hello World!‘);
$channel->basic_publish($msg, ‘‘, ‘hello‘);

echo " [x] Sent ‘Hello World!‘\n";

声明队列是幂等的-仅当队列不存在时才创建。消息内容是一个字节数组,因此您可以在此处编码任何内容。

最后,我们关闭通道和连接;

$channel->close();
$connection->close();

这是整个send.php类

发送不起作用!

如果这是您第一次使用RabbitMQ,但没有看到“已发送”消息,那么您可能会不知所措,想知道可能是什么问题。代理可能是在没有足够可用磁盘空间的情况下启动的(默认情况下,它至少需要200 MB的可用空间),因此拒绝接受消息。检查代理日志文件以确认并减少限制(如有必要)。该配置文件文档会告诉你如何设置disk_free_limit。

接收

这就是我们的发布者。我们的接收者正在侦听RabbitMQ发出的消息,因此与发布单个消息的发布者不同,我们将使其继续运行以侦听消息并将其打印出来。

该代码(在receive.php中)具有与send几乎相同的 include和use:

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";

请注意,我们也在这里声明队列。因为我们可能在发布者之前启动使用者,所以我们想确保队列存在,然后再尝试从中使用消息。

我们将告诉服务器将队列中的消息传递给我们。我们将定义一个可调用PHP ,它将接收服务器发送的消息。请记住,消息是从服务器异步发送到客户端的。

$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有回调时,我们的代码将阻塞。每当我们收到一条消息时,我们的$ callback函数都会传递给收到的消息。

这是整个receive.php类

放在一起

现在我们可以运行两个脚本。在终端中,运行使用者(接收方):

php receive.php

然后,运行发布者(发送者):

php send.php

消费者将打印通过RabbitMQ从发件人那里得到的消息。接收方将继续运行,等待消息(使用Ctrl-C停止它),因此请尝试从另一个终端运行发送方。

列表队列

您可能希望查看RabbitMQ拥有哪些队列以及队列中有多少条消息。您可以使用rabbitmqctl工具(作为特权用户)进行操作:

sudo rabbitmqctl list_queues

在Windows上,省略sudo:

rabbitmqctl.bat list_queues

原文地址:https://www.cnblogs.com/zx-admin/p/12014927.html

时间: 2024-07-31 20:54:50

RabbitMQ中文文档PHP版本(一)--打印Hello World的相关文章

RabbitMQ中文文档PHP版本(二)--发布/订阅

2019年12月10日10:01:00 原文:https://www.rabbitmq.com/tutorials/tutorial-three-php.html 工作队列 (使用php-amqplib) 先决条件 本教程假定RabbitMQ 已在标准端口(5672)的本地主机上安装并运行.如果您使用其他主机,端口或凭据,则连接设置需要进行调整. 在哪里获得帮助 如果您在阅读本教程时遇到困难,可以 通过邮件列表与我们联系. 在第一个教程中,我们编写了程序来发送和接收来自命名队列的消息.在这一部分

RabbitMQ中文文档PHP版本(七)--发布者确认

2019年12月10日10:07:12 原文:https://www.rabbitmq.com/tutorials/tutorial-seven-java.html 注意这里目前没有PHP版本只有java版本 发布者确认 发布者确认 是实现可靠发布的RabbitMQ扩展.在通道上启用发布者确认后,代理将异步确认客户端发布的消息,这意味着它们已在服务器端处理. (使用Java客户端) 先决条件 本教程假定RabbitMQ 已在标准端口(5672)的本地主机上安装并运行.如果您使用其他主机,端口或凭

RabbitMQ中文文档PHP版本(六)--远程过程调用(RPC)

2019年12月10日10:05:54 原文:https://www.rabbitmq.com/tutorials/tutorial-six-php.html 远程过程调用(RPC) (使用php-amqplib) 先决条件 本教程假定RabbitMQ 已在标准端口(5672)的本地主机上安装并运行.如果您使用其他主机,端口或凭据,则连接设置需要进行调整. 在哪里获得帮助 如果您在阅读本教程时遇到困难,可以 通过邮件列表与我们联系. 在第二篇教程中,我们学习了如何使用工作队列在多个工作人员之间分

RabbitMQ中文文档PHP版本(五)--主题

2019年12月10日10:05:11 原文:https://www.rabbitmq.com/tutorials/tutorial-five-php.html 话题 (使用php-amqplib) 先决条件 本教程假定RabbitMQ 已在标准端口(5672)的本地主机上安装并运行.如果您使用其他主机,端口或凭据,则连接设置需要进行调整. 在哪里获得帮助 如果您在阅读本教程时遇到困难,可以 通过邮件列表与我们联系. 在上一教程中,我们改进了日志记录系统.我们没有使用只能进行虚拟广播的扇出交换机

OkHttp 官方中文文档

OkHttp官方中文文档 本文结构 Calls Connections Recipes Interceptors HTTPS 本文翻译来自 官方OkHttp Wiki OkHttp官方中文文档 一Calls 1 请求 2 响应 3重写请求 4重写响应 5后续请求 6请求重试 7 呼叫 8调度 二Connections 1URLs URLs摘要 2 Addresses 3 Routes 4Connections 三Recipes 1同步获取 2异步获取 3访问头 4Posting a String

Vlang官网文档(中文翻译)-vlang中文文档--v0.1.0_20180625

PS:主要为自己学习,,,,看的时候顺便翻译的,,,渣翻(非全人工)勿喷. 介绍 V是一种用于构建可维护软件的静态类型编译编程语言. 它与Go相似,也受到Oberon.Rust.Swift的影响. V是一种非常简单的语言,阅读这份文档大概只需要半小时的时间,读完之后,您将学习到V的全部内容. 尽管很简单,但是它为开发人员提供了很多功能,你能用其它编程语言做的任何事情,都可以用V做到. Hello World fn main() { println('hello world') } 函数用 fn

Apache Storm 1.1.0 中文文档 | ApacheCN

前言  Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ApacheCN 最近组织了翻译 Storm 1.1.0 中文文档 的活动,整体 翻译进度 为 96%. 感谢大家参与到该活动中来 感谢无私奉献的 贡献者,才有了这份 Storm 1.1.0 中文文档 感谢一路有你的陪伴,我们才可以做的更好,走的更快,走的更远,我们一直在努力 ... 网页地址:

Bottle 中文文档

译者: smallfish ([email protected]) 更新日期: 2009-09-25 原文地址: http://bottle.paws.de/page/docs (已失效) 译文地址: http://pynotes.appspot.com/static/bottle/docs.htm (需翻墙) 这份文档会不断更新. 如果在文档里没有找到答案,请在版本跟踪中提出 issue. 基本映射 映射使用在根据不同 URLs 请求来产生相对应的返回内容. Bottle 使用 route()

Hadoop-2.2.0中文文档—— Common - CLI MiniCluster

目的 使用 CLI MiniCluster, 用户可以简单地只用一个命令就启动或关闭一个单一节点的Hadoop集群,不需要设置任何环境变量或管理配置文件. CLI MiniCluster 同时启动一个 YARN/MapReduce 和 HDFS 集群. 这对那些想要快速体验一个真实的Hadoop集群或是测试依赖明显的Hadoop函数的非Java程序 的用户很有用. Hadoop Tarball 你需要从发布页获取tar包.或者,你可以从源码中自己编译. $ mvn clean install -