我需要通過消息隊列互相通信的兩個服務。一種是使用PHP編寫的遺留服務,另一種使用Java。遲於以後,PHP服務將被重寫爲Java。目前他們彼此溝通的方式是寫入一個共享數據庫,其他服務輪詢。這是我試圖擺脫並取代消息隊列。
問題
我的工作,現在的通信是從PHP服務的Java服務。它需要發送一個相對複雜的對象(字符串和整數以及字符串和整數的列表和映射)。理想情況下,該解決方案可以在PHP中使用,並且適用於Java,因爲這將是該項目的遺留問題。
可能的解決方案
-
1.
我需要通過消息隊列互相通信的兩個服務。一種是使用PHP編寫的遺留服務,另一種使用Java。遲於以後,PHP服務將被重寫爲Java。目前他們彼此溝通的方式是寫入一個共享數據庫,其他服務輪詢。這是我試圖擺脫並取代消息隊列。
問題
我的工作,現在的通信是從PHP服務的Java服務。它需要發送一個相對複雜的對象(字符串和整數以及字符串和整數的列表和映射)。理想情況下,該解決方案可以在PHP中使用,並且適用於Java,因爲這將是該項目的遺留問題。
可能的解決方案
我提出的解決方案是使用jms-json-object
轉換將來自PHP/Stomp的消息排入隊列。這些消息是特製的JSON,當它們以Java語言使用readObject
出列時,可以使用XStream將它們重建爲完整對象。這個重建發生在ActiveMQ的內部,我只需確保必要的aliases和converters就位。當我們最終用Java代替PHP組件時,發送消息只是使用writeObject
。
沒有爲PHP中的STOMP客戶端,
在我看來,你應該保持組件交互從特定的實現自由。 ActiveMQ很麻煩,許多系統都將其刪除,以支持RabbitMQ或Sun OpenMQ。您必須避免在PHP中編寫「發送消息」例程,改爲創建「SendMessage」servlet,並使用curl發佈JSON編碼的消息。然後,servlet將使用連接工廠等。只需少量開銷,就可以從任何mq-server特定的代碼中釋放PHP組件。您可以使用帶有JSON負載的TextMessage,使用Jackson輕鬆進行編碼和解碼。
我在PHP中使用MQ特定的代碼沒有問題。無論如何,這是傳統代碼。此外,MQ爲持久性,持久性,交付等提供了一些很好的保證。在這種情況下,創建servlet和使用curl等不是正確的解決方案。 – 2010-06-18 15:42:16
是的,在http://stomp.fusesource.org/還有一個純PHP庫,它似乎更適合ActiveMQ。使用Stomp是給定的,但如何使用它是我撞牆的地方。 – 2010-06-18 15:36:31
這些庫(PECL擴展和fusesource)是糟糕的,我個人不建議使用它們,因爲它們是滯後的,越野車,它們實現STOMP 1.0。這是痛苦。疼痛。疼痛。和恐怖。 – 2013-12-20 16:02:04