3

背景

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

问题

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

可能的解决方案

    1.
4

3 回答 3

3

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

于 2010-06-24T12:35:32.650 回答
0

PHP有一个STOMP客户端,

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

于 2010-06-18T15:31:24.727 回答
-2

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

于 2010-06-18T15:35:10.323 回答