问题标签 [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.
php - rabbitmq + phalconphp 作为消费者(有后台作业)
如何将 phalconphp 作为消费者与 rabbitmq 连接?
据我了解,我需要为 phalconphp 运行一个后台进程,以便能够监听来自 rabbitmq 的事件/消息并处理一些时间密集型任务(发送邮件、写入日志)。
什么会解雇消费者(在 Phalcon 中),也许是监督者?
我发现一些文章指出只是运行php worker.php包含一个监听方法:
php - RabbitMQ 重试机制
我正在使用rabbitMQ,我使用basic_get从队列中获取每条消息,而没有自动确认过程,这意味着消息保留在队列中,直到我确认或确认消息。
有时我的消息由于引发了一些异常而无法处理,这阻止了它们被完全处理。
在这些情况下,我想再试一次,让我们立即说两次,如果我仍然无法处理它们 - 我想在一小时内再试 3 次,如果一切都失败了,那么我想取消消息并将其从队列中永久删除。
问题是rabbitMQ中是否有任何机制为我提供消息重试(也计算重试次数),以及选择何时启动重试的能力——某种延迟机制?
php - '许多测试'在 php-amqp 'make test' 期间失败
“进行测试”的结果
我使用php-5.6.0
, 和amqp-1.4.0
, rabbitmq-c-0.5.2
。
我可以完成这个过程,但是当我运行“make test”时,我无法获得所有通过的结果。
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 生成的队列。这绝对是由于代理上代理发布/消费过程而发生的事情。
感谢您坚持...任何帮助表示赞赏!
- 麦克风
php - 在 PHP AMQPQueue::consume() 中使用 xdebug
我们正在使用 RabbitMQ,并希望在消费者内部使用 xdebug。我们AMQPQueue
用来监听队列中的消息。我最多可以使用 xdebug,AMQPQueue::consume()
但是一旦consume()
被调用,我就无法获得断点。任何帮助都会很棒。
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 稳定版
php - 如何使用videlalvaro/php-amqplib 完成阻塞basic_get 调用
我正在使用https://github.com/videlalvaro/php-amqplib做一些 rabbitmq 工作:
我正在尝试创建一个阻塞版本的basic_get,(或者一个我可以重复调用并且每次只能得到一个消息的basic_consume版本),它将阻塞直到一条消息准备好然后返回它而不是返回null,如果没有在队列中。
当我尝试使用 basic_consume 获取一条消息时,事情会变得混乱,我最终会收到一堆“未准备好”但未确认的消息。(如果我以这种方式只获取一条消息,则每次都有效,如果我尝试获取 2 条消息,它有时会挂断并可以正常工作)
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?
我应该选择哪种交通工具?
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代码