【问题标题】:Can't browse messages in an ActiveMQ based Message Store with WSO2 ESB console无法使用 WSO2 ESB 控制台浏览基于 ActiveMQ 的消息存储中的消息
【发布时间】:2021-12-24 01:36:16
【问题描述】:

我在 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 wso2esb


    【解决方案1】:

    此答案不会直接解决问题,但会向您展示如何在 ActiveMQ 控制台中从 WSO2 消息存储的 JMS 队列中查看 ObjectMessages 的内容。当从存储读取的处理器无法处理消息并且您需要知道该消息包含什么以便进一步调试您的问题时,这一点尤其重要。

    如果您没有在 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 中的 StorableMessage 类或 get a version of StorableMessage 进行逆向工程,并将以下内容添加到其中:

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

      private static final long serialVersionUID = 319132393668950267L;
      

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

    2. 使用类路径的相同 jar 构建修改后的类:

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

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

    3. 最后一步是将更新后的jar部署到ACTIVEMQ_ROOT/lib目录并反弹ActiveMQ服务器。

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

    【讨论】:

    • 谢谢,它有效!如果要查找 serialVersionUID,可以使用 JDK 中的“serialver”:serialver -classpath ./synapse-core_2.1.2.wso2v4.jar org.apache.synapse.message.store.impl.jms.StorableMessage
    • @Jean-Michel:是的,谢谢。这对于从实时系统获取 serialVersionUID 非常有用,而无需退回服务器和检查错误。
    【解决方案2】:

    我也面临同样的问题。

    测试:

    • WSO2 ESB 4.8.1
    • WSO2 MB 2.1.0 和 ActiveMQ 5.5.1

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

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

    【讨论】:

    【解决方案3】:

    我正在使用 WSO2 EI 6.5.0 和 Activemq 5.16.3。面临同样的问题,无法在 Activemq 页面控制台中查看消息。

    根据这个doc,在windows.bat 文件中添加了以下行,解决了我的问题。

    org.apache.activemq.SERIALIZABLE_PACKAGES="*"
    

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 2017-01-08
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多