2015-12-11 87 views
2

我们使用ActiveMQ,PHP和跺脚。我们发现,当ActiveMQ重启消费者时,无法识别丢失的连接。我发现,只有跺脚1.2支持心跳。而ActiveMQ使用stomp 1.1和最新的php stomp实现仅支持1.0版本。 此外,我尝试AMQP,但是,我发现支持PHP 0.9.1最新实施的ActiveMQ使用1.0版本,并且在客户端连接的ActiveMQ返回错误:我应该选择哪种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

对不起,qpid质子,而不是pqid质子。只是错字。 – Hayate

+0

STOMP v1.1和v1.2都支持心跳,ActiveMQ支持STOMP协议1.0,1.1和1.2 –

+0

但是仍然无法找到心跳的PHP实现:( – Hayate

回答

-1

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

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

这方式,你的代码会意识到ActiveMQ已重新启动,其余连接可能会重置。

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

+0

正如我们发现的,当我们选择代理时,RabbitMQ没有本地支持预定的消息,这是我们任务和解决方案的关键部分,而且我们对ActiveMQ有很多的了解,很难切换到其他经纪人: – Hayate

+0

答案是“使用不同的工具” – RaGe

+0

@RaGe给出了语言,使用的库和要求的组合......没有太多的其他选择,但我很乐意听到他们的声音...... – jarias

相关问题