我应该选择哪种 ActiveMQ 传输?

Posted

技术标签:

【中文标题】我应该选择哪种 ActiveMQ 传输?【英文标题】:Which ActiveMQ transport i should choose? 【发布时间】:2016-03-17 06:44:06 【问题描述】:

我们使用 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?

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

【问题讨论】:

对不起,qpid 质子,而不是 pqid 质子。只是错字。 STOMP v1.1 和 v1.2 都支持心跳,ActiveMQ 支持 STOMP 协议 1.0、1.1 和 1.2 但是还是找不到带心跳的php实现:( 【参考方案1】:

您的版本似乎陷入僵局......没有简单的解决方案。

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

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

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

【讨论】:

我们发现,当我们选择代理时,RabbitMQ 并没有原生支持定时消息。这是我们的任务和解决方案的关键部分。我们对 ActiveMQ 有很多经验。很难切换到另一个经纪人。 :( “使用不同的工具”这个答案并不能很好地回答所提出的问题。 @RaGe 考虑到语言、使用的库和要求的组合......没有很多其他选择。但我会很高兴听到他们...

以上是关于我应该选择哪种 ActiveMQ 传输?的主要内容,如果未能解决你的问题,请参考以下文章

Active MQ 传输 ObjectMessage 异常

activemq的安装使用

我应该为 HTML 嵌入选择哪种音频格式和哪种压缩方式?

我应该选择哪种布局?

我应该使用(最快)哪种方法来选择元素?

在 MySQL 中,我应该选择哪种排序规则?