2014-02-13 97 views
1

我在WSO2配置JMS消息存儲ESB 4.8.1瀏覽消息,基於ActiveMQ的5.9不能與WSO2 ESB控制檯ActiveMQ的基於消息存儲

配置是OK,我可以存儲和出隊消息在/這家店,看到在ActiveMQ的控制檯那些消息(消息數,消息ID列表,...)

不過,我看不出他們與WSO2的管理控制檯: 數量的消息是「不適用「,」未找到消息「而不是店內消息列表

使用ActiveMQ 5時的結果相同.7(將此分發的jar包裝到ESB/repository/components/lib中)。

它與ESB V4.5.1工作:我可以看到列表中刪除一個消息,查看消息體,...

如果有人設法配置這一點,我會很樂意在收到信息他們是如何做到的。

回答

2

我面臨同樣的問題。

測試了:

  • WSO2 ESB 4.8.1
  • WSO2 MB 2.1.0和5.5.1的ActiveMQ

如果我使用WSO2 MB作爲經紀人,我必須手動創建WSO2 MB端的隊列存儲消息。在ActiveMQ中,隊列會自動創建。

我希望這個信息有助於解決錯誤。

+1

顯然,來自「Message Stores」的查看消息的功能是從WSO2 ESB 4.7版中刪除的功能。進一步的信息在這裏:[https://wso2.org/jira/browse/ESBJAVA-2529](https://wso2.org/jira/browse/ESBJAVA-2529) – Chilcano

4

這個答案將不能直接解決這個問題,但它會告訴你如何可以查看ObjectMessage S的從ActiveMQ的控制檯內的WSO2郵件存儲的JMS隊列內容。當來自商店的處理器無法處理消息時,這一點尤其重要,並且您需要知道該消息包含哪些內容才能進一步調試問題。

如果你不修改上的ActiveMQ側任何事情,你想查看從商店的JMS隊列的消息細節,你會得到下面的異常是由於WSO2端系列化:

javax.jms.JMSException: Failed to build body from content. Serializable class not available to broker. Reason: java.lang.ClassNotFoundException: org.apache.synapse.message.store.impl.jms.StorableMessage 

我在synapse-core_2.1.2.wso2v4.jarESB_ROOT/repository/components/plugins)中發現了StorableMessage類。如果您只將該jar部署到ACTIVEMQ_ROOT/lib而無需修改,則只會返回ObjecttoString()方法,這是沒有用的。

  1. 所以你可以做的是逆向工程從JAR或get a version of StorableMessage並添加以下到它的StorableMessage類:

    @Override 
    public String toString() { 
        return axis2message.getSoapEnvelope(); 
    } 
    

    private static final long serialVersionUID = 319132393668950267L; 
    

    我設置serialVersionUID到串行化後在WSO2端設置的長整型值,在嘗試查看消息時獲得有關ActiveMQ控制檯中ID不匹配的錯誤細節。這可能隨ESB的每次升級而改變,因爲它很可能由JVM設置,因爲我沒有看到在源代碼中特別定義的一個。如果是這種情況,則需要更改StorableMessage類以反映新的ID。

  2. 構建使用類路徑相同的jar修改後的類:

    javac -cp synapse-core_2.1.2.wso2v4.jar StorableMessage.java 
    

    可以使用zip實用程序或jar命令來添加(改寫)新StorableMessage類的突觸core_2.1.2 .wso2v4.jar文件。

  3. 最後一步是將更新的jar部署到ACTIVEMQ_ROOT/lib目錄並反彈ActiveMQ服務器。

我希望這可以幫助別人。 :)

+1

謝謝,它的工作原理!如果您想查找serialVersionUID,可以使用JDK中的'serialver':serialver -classpath ./synapse-core_2.1.2.wso2v4.jar org.apache.synapse.message.store.impl.jms.StorableMessage –

+0

@ Jean-米歇爾:是的,謝謝。這非常適合從實時系統獲取serialVersionUID,而不必反彈服務器並檢查錯誤。 – Voicu