Can';t使用WSO2 ESB控制台浏览基于ActiveMQ的消息存储中的消息

Can';t使用WSO2 ESB控制台浏览基于ActiveMQ的消息存储中的消息,wso2,wso2esb,Wso2,Wso2esb,我已经在WSO2 ESB 4.8.1中基于ActiveMQ 5.9配置了JMS消息存储 配置正常,我可以在该存储中存储消息并从中取出消息,并在ActiveMQ控制台中查看这些消息(消息数量、消息ID列表,…) 但是,我无法在WSO2管理控制台中看到它们: 邮件数为“不适用”、“未找到邮件”,而不是存储区内的邮件列表 使用ActiveMQ 5.7(将JAR从该发行版放入ESB/repository/components/lib)时的结果相同 它与ESB v4.5.1一起工作:我可以查看列表并删除消

我已经在WSO2 ESB 4.8.1中基于ActiveMQ 5.9配置了JMS消息存储

配置正常,我可以在该存储中存储消息并从中取出消息,并在ActiveMQ控制台中查看这些消息(消息数量、消息ID列表,…)

但是,我无法在WSO2管理控制台中看到它们: 邮件数为“不适用”、“未找到邮件”,而不是存储区内的邮件列表

使用ActiveMQ 5.7(将JAR从该发行版放入ESB/repository/components/lib)时的结果相同

它与ESB v4.5.1一起工作:我可以查看列表并删除消息,查看消息正文


如果有人能成功地进行配置,我很乐意收到他们是如何进行配置的信息

我也面临同样的问题

通过以下方式进行测试:

  • WSO2 ESB 4.8.1
  • WSO2 MB 2.1.0和ActiveMQ 5.5.1
如果我使用WSO2 MB作为代理,我必须在WSO2 MB端手动创建队列来存储消息。在ActiveMQ中,队列是自动创建的


我希望此信息对解决此错误有用。

此答案不会直接解决此问题,但它将向您展示如何从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.jar(ESB_ROOT/repository/components/plugins)中找到了
StorableMessage
类。如果只将该jar部署到ACTIVEMQ_ROOT/lib而不进行修改,则只会返回
对象
toString()
方法,这是没有帮助的

  • 因此,您可以对jar中的
    StorableMessage
    类进行反向工程,或者向其中添加以下内容:

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

    在尝试查看消息详细信息时,在ActiveMQ控制台中获取了关于ID不匹配的错误后,我在序列化时将该
    serialVersionUID
    设置为WSO2端的long值。这可能会随着ESB的每次升级而改变,因为它很可能是由JVM设置的,因为我没有看到在源代码中专门定义的。如果是这种情况,则需要更改
    StorableMessage
    类以反映新ID

  • 使用与类路径相同的jar构建修改后的类:

    javac -cp synapse-core_2.1.2.wso2v4.jar StorableMessage.java
    
    您可以使用zip实用程序或jar命令将新的
    StorableMessage
    类添加(覆盖)到synapse-core_2.1.2.wso2v4.jar文件中

  • 最后一步是将更新后的jar部署到ACTIVEMQ_根/lib目录并跳出ACTIVEMQ服务器


  • 我希望这对某人有帮助。:)

    显然,从“消息存储”查看消息的功能是WSO2 ESB版本4.7中删除的一项功能。更多信息请点击这里:谢谢,它很有效!如果要查找serialVersionUID,可以使用JDK:serialver-classpath./synapse-core_2.1.2.wso2v4.jar org.apache.synapse.message.store.impl.jms中的“serialver”。StorableMessage@Jean-米歇尔:是的,谢谢。这对于从实时系统获取serialVersionUID非常有用,而无需跳转服务器和检查错误。
    javac -cp synapse-core_2.1.2.wso2v4.jar StorableMessage.java