【问题标题】:Communicating between PHP and Java using ActiveMQ/Stomp使用 ActiveMQ/Stomp 在 PHP 和 Java 之间进行通信
【发布时间】:2011-03-05 11:50:40
【问题描述】:

背景

我有两个服务需要通过消息队列相互通信。一种是用 PHP 编写的遗留服务,另一种是用 Java 编写的。迟早,PHP 服务将用 Java 重写。当前它们相互通信的方式是写入共享数据库,由其他服务轮询。这就是我试图摆脱并用消息队列替换的内容。

问题

我现在正在处理的通信是从 PHP 服务到 Java 服务。它需要发送一个相对复杂的对象(字符串和整数以及字符串和整数的列表和映射)。理想情况下,该解决方案在 PHP 中是可行的,在 Java 中是理想的,因为这将是这个项目的遗产。

可能的解决方案

    1.

【问题讨论】:

    标签: java php activemq stomp enterprise-integration


    【解决方案1】:

    我想出的解决方案是使用 jms-json-object 转换将来自 PHP/Stomp 的消息排入队列。这些消息是特制的 JSON,因此当它们在 Java 中使用 readObject 出列时,可以使用 XStream 将它们重构为完整对象。这种重建发生在ActiveMQ 内部,我只需要确保必要的aliasesconverters 就位。当我们最终将 PHP 组件替换为 Java 时,发送消息将只是使用 writeObject 的问题。

    【讨论】:

      【解决方案2】:

      有一个 PHP 的 STOMP 客户端,

      http://pecl.php.net/package/stomp

      【讨论】:

      • 是的,stomp.fusesource.org 也有一个纯 PHP 库,它似乎与 ActiveMQ 配合得更好。使用 Stomp 是给定的,但如何使用它是我碰壁的地方。
      • 这些库(PECL 扩展和 fusesource)非常糟糕,我个人不建议使用它们,因为它们是滞后的、错误的并且它们实现了 STOMP 1.0。这就是痛苦。疼痛。疼痛。还有恐怖。
      【解决方案3】:

      在我看来,您应该使组件交互不受特定实现的影响。 ActiveMQ 有缺陷,许多系统将其删除,取而代之的是 RabbitMQ 或 Sun OpenMQ。您必须避免在 PHP 中编写“发送消息”例程,而是创建“SendMessage”servlet,并使用 curl 发布 JSON 编码的消息。然后,servlet 将使用连接工厂等。只需一点开销,您就可以从任何 mq-server 特定代码中释放 PHP 组件。您可以使用带有 JSON 加载的 TextMessage,使用 Jackson 轻松对其进行编码和解码。

      【讨论】:

      • 我对 PHP 中的 MQ 特定代码没有任何问题。无论如何,它是遗留代码。此外,MQ 为持久性、持久性、交付等提供了一些很好的保证。在这种情况下,创建 servlet 和使用 curl 等并不是正确的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 2019-04-25
      • 2013-05-05
      • 2011-12-03
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      相关资源
      最近更新 更多