2

我们使用 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 时返回错误:

WARN | Connection attempt from non AMQP v1.0 client. AMQP,0,0,9,1
WARN | Transport Connection to: tcp://127.0.0.1:42168 failed: org.apache.activemq.transport.amqp.AmqpProtocolException: Connection from client using unsupported AMQP attempted

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

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

4

1 回答 1

-1

看来你有一个版本的死锁......没有简单的解决方案。

一个选项可能是在应用程序级别实现心跳。每 X 秒: - 连接 - 发送到队列(例如心跳) - 从同一个队列接收 - 休眠 X 秒(X 应该小于重新启动 ActiveMQ 所需的时间)

这样,您的代码将意识到 ActiveMQ 已重新启动并且可以重置其余连接。

如果您的项目有可能,我会切换到 RabbitMQ 并将 AMQP 与 php-amqplib 一起使用。

于 2015-12-11T11:17:47.727 回答