我们使用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质子,但我在ubuntu中遇到一些问题,我对他们的php示例感到困惑:https://qpid.apache.org/releases/qpid-proton-0.8/messenger/php/examples/recv.php.html 我在哪里可以找到包含的proton.php?
我应该选择哪种运输方式?
答案 0 :(得分:-1)
似乎你有一个版本的僵局......没有简单的解决方案。
选项可以是在应用程序级别实现心跳。每隔X秒做: - 连接 - 发送到队列(例如,心跳) - 从同一队列接收 - 睡眠X秒(X应该小于重启ActiveMQ所需的时间)
这样,您的代码将意识到ActiveMQ已重新启动,其余连接可能会重置。
如果您的项目可行,我会切换到RabbitMQ并使用AMQP和php-amqplib。