2015-12-11 61 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