问题标签 [php-amqp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1069 浏览

php - rabbitmq + phalconphp 作为消费者(有后台作业)

如何将 phalconphp 作为消费者与 rabbitmq 连接?

据我了解,我需要为 phalconphp 运行一个后台进程,以便能够监听来自 rabbitmq 的事件/消息并处理一些时间密集型任务(发送邮件、写入日志)。

什么会解雇消费者(在 Phalcon 中),也许是监督者?

我发现一些文章指出只是运行php worker.php包含一个监听方法:

http://www.sitepoint.com/php-rabbitmq-advanced-examples/

0 投票
1 回答
1248 浏览

php - PECL AMQP 与 php-amqp

我即将实现一个使用 RabbitMQ 的基于 PHP 的系统。我可以说那里有 2 个成熟的库:PECL AMQPphp-amqp

我将为客户端和工作人员使用 PHP。

有人对这两个库有任何实际经验吗?在某些方面,一个比另一个更好吗?使用这些中的任何一个时是否有任何限制?哪个更受欢迎?

0 投票
1 回答
1206 浏览

php - RabbitMQ 重试机制

我正在使用rabbitMQ,我使用basic_get从队列中获取每条消息,而没有自动确认过程,这意味着消息保留在队列中,直到我确认或确认消息。

有时我的消息由于引发了一些异常而无法处理,这阻止了它们被完全处理。

在这些情况下,我想再试一次,让我们立即说两次,如果我仍然无法处理它们 - 我想在一小时内再试 3 次,如果一切都失败了,那么我想取消消息并将其从队列中永久删除。

问题是rabbitMQ中是否有任何机制为我提供消息重试(也计算重试次数),以及选择何时启动重试的能力——某种延迟机制?

0 投票
0 回答
62 浏览

php - '许多测试'在 php-amqp 'make test' 期间失败

“进行测试”的结果 在此处输入图像描述

我使用php-5.6.0 , 和amqp-1.4.0, rabbitmq-c-0.5.2

我可以完成这个过程,但是当我运行“make test”时,我无法获得所有通过的结果。

0 投票
1 回答
361 浏览

php - PHP-AMQPLIB:RPC -> RPC 队列留下未确认消息

我有几个 PHP RPC 类型的消费者(代理)永久附加到 RMQ 以进行事件消费。

一个代理位于远程系统上 - 但是,出于开发/测试目的,我在本地运行“远程”代理。

有面向应用程序的代理,其中之一(代理 Au)处理请求,在处理期间,通过包含的类创建到远程代理的新 AMQP 连接,将请求发布到远程代理(代理 Vu)。

代理 Vu 使用请求,将返回的有效负载发布回代理 Au - 并调用 basic_ack() 方法。

Broker Au 从 Broker Vu 解包返回的有效负载,并将其有效负载返回给正确显示结果的 PHP 客户端。

回顾:

testProgram --> 实例化 testClass1,它打印出回调队列名称:(例如:amq.gen-6_EhL_eb3HcLiiOb-TUNRA),向代理 Au 发布请求

代理 Au --> 实例化 class2,打印出回调队列名称:(例如:amq.gen-J0jhxeMAf1XZSbHZJ8NZ3g),向代理 Vu 发布请求

代理 Vu --> 做事(成功),将有效负载返回给代理 Au,调用 basic_ack()

代理 Au --> 解码返回负载并生成自己的返回负载到 testProgram 并调用 basic_ack()。

testProgram --> 显示结果并结束

我在 RMQ 管理控制台的队列选项卡中看到的是:

我所有连接的经纪人(AD = true)和(amq.gen-J0jhxeMAf1XZSbHZJ8NZ3g)显示就绪:0,未确认:1,总计:1

对于我提交的尽可能多的请求,生成的回调队列会相应增加。

在代理 Vu 中,我有一个 ping 事件处理程序——它所做的只是说“是的——我在这里”并返回一个 true。此事件还会生成孤立生成的回调队列孤立。

我已经在代理中注册了所有关闭方法 - 如果我尝试显式关闭连接客户端中的通道/连接(遵循 $channel->wait()),它会第一次工作并使代理崩溃第二次执行。

如果我运行一个直接连接到代理 Vu 并提交相同事件请求的测试程序,则不会孤立 amqp 生成的队列。这绝对是由于代理上代理发布/消费过程而发生的事情。

感谢您坚持...任何帮助表示赞赏!

- 麦克风

0 投票
1 回答
439 浏览

php - 在 PHP AMQPQueue::consume() 中使用 xdebug

我们正在使用 RabbitMQ,并希望在消费者内部使用 xdebug。我们AMQPQueue用来监听队列中的消息。我最多可以使用 xdebug,AMQPQueue::consume()但是一旦consume()被调用,我就无法获得断点。任何帮助都会很棒。

0 投票
0 回答
715 浏览

php - 使用线程时出现 PHP AMQP(不是 phpamqplib)错误

我正在尝试将一个简单的 AMQP 客户端变成多线程。如果我不使用线程扩展发布,则以下代码有效:

以下是有错误的输出:

任何人都知道为什么会发生这种情况或如何解决?

Rabbitmq 在 HOST 上运行。

如果从类发布声明中删除“扩展线程”,该程序将完美运行。上面的代码甚至还没有使用线程。我只是扩展课程并且它打破了。

系统信息

操作系统:Ubuntu 15.10

Rabbitmq-c (apt-get 安装)

librabbitmq-dev:amd64 0.5.2-2 amd64 AMQP 客户端库用 C 编写 - 开发文件 librabbitmq1:amd64 0.5.2-2 amd64 AMQP 客户端库用 C 编写

我按照此链接重新编译 Ubuntu PHP 包以支持 ZTS。

PHP 5.6.11-1ubuntu3.2 (cli)

版权所有 (c) 1997-2015 PHP 集团

Zend Engine v2.6.0,版权所有 (c) 1998-2015 Zend Technologies 和 Zend OPcache v7.0.6-dev,版权所有 (c) 1999-2015,Zend Technologies

PHP 模块

amqp 1.6.0 稳定版

pthreads 2.0.10 稳定版

0 投票
1 回答
644 浏览

php - 如何使用videlalvaro/php-amqplib 完成阻塞basic_get 调用

我正在使用https://github.com/videlalvaro/php-amqplib做一些 rabbitmq 工作:

我正在尝试创建一个阻塞版本的basic_get,(或者一个我可以重复调用并且每次只能得到一个消息的basic_consume版本),它将阻塞直到一条消息准备好然后返回它而不是返回null,如果没有在队列中。

当我尝试使用 basic_consume 获取一条消息时,事情会变得混乱,我最终会收到一堆“未准备好”但未确认的消息。(如果我以这种方式只获取一条消息,则每次都有效,如果我尝试获取 2 条消息,它有时会挂断并可以正常工作)

0 投票
1 回答
1051 浏览

php - 我应该选择哪种 ActiveMQ 传输?

我们使用 ActiveMQ、php 和 stomp。我们发现,当 ActiveMQ 重新启​​动时,在 stomp 上工作的消费者无法识别连接丢失。我发现,只有 stomp 1.2 支持心跳。ActiveMQ 使用 stomp 1.1,最新的 php stomp 实现只支持 1.0 版本。我也尝试 amqp,但我发现 php 支持 0.9.1 的最新实现,ActiveMQ 使用 1.0 版本,当客户端连接 ActiveMQ 时返回错误:

我也尝试编译 qpid proton,但我在 ubuntu 中有一些问题,我对他们的 php 示例感到困惑:https://qpid.apache.org/releases/qpid-proton-0.8/messenger/php/examples/recv.php。 html 我在哪里可以找到包含的 proton.php?

我应该选择哪种交通工具?

0 投票
0 回答
692 浏览

php - RabbitMQ PHP (pecl php-amqp) 读取时间超过 1.5 秒(在小型基准测试期间)

我们有一个使用 RabbitMQ 运行的测试,但不知何故达到了一个“阈值”,这使得 RabbitMQ 变慢了。

我们所做的是,我们设置了一个 RabbitMQ 服务器并制作了一个小的 PHP 脚本,该脚本使用 pecl-amqp 连接(无 pconnect)到 MQ 服务器,发送 1 条随机消息并在此之后立即断开连接。我们 fork 这个进程 200 次(单次 php 执行,所以没有线程),这意味着每秒 +/- 2000 个连接被打开到 MQ 服务器并关闭。

之后,我在不同的服务器上启动相同的脚本来测量连接时间 + 读取时间。我们注意到客户端收到“Connection.Start”消息需要 +/- 1.5 秒。我为这个单一客户端添加了 tcpdump 的屏幕截图,以向您展示情况。我们看到的另一个问题是,有很多 TCP 乱序和重传。

服务器规格

  • 裸机
  • CPU:2x Intel(R) Xeon(R) CPU E5-2420 0 @ 1.90GHz
  • 内存:24GB

TCPdump http://i.imgur.com/rF1GsOy.png

sysctl 设置:

rabbitmq.conf

rabbitmqctl 报告(在“重”负载测试期间)

php代码