我已经在WSO2 ESB 4.8.1中配置了基于ActiveMQ 5.9的JMS消息存储
配置没问题,我可以在此商店中存储和出列邮件,并在ActiveMQ控制台中查看这些邮件(邮件数量,邮件ID列表......)
但是,我无法通过WSO2管理控制台看到它们: 消息数量为“不适用”,“未找到消息”而不是商店内的消息列表
使用ActiveMQ 5.7时(使用此分发中的jar到ESB / repository / components / lib),结果相同。
它正在使用ESB v4.5.1:我可以看到列表并删除消息,查看消息正文,...
如果有人设法配置这个,我很乐意收到他们是如何做到这一点的信息。
答案 0 :(得分:4)
这个答案不会直接解决问题,但会告诉您如何在ActiveMQ中从WSO2消息存储库的JMS队列中查看ObjectMessage
的内容安慰。当从存储中读取的处理器无法处理消息并且您需要知道该消息包含哪些内容以便进一步调试您的问题时,这一点尤为重要。
如果您未在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 而不做任何修改,那么您将只返回Object
的{{1}}方法,这没有用。
所以你可以做的是从jar或get a version of StorableMessage对toString()
类进行反向工程,然后在其中添加以下内容:
StorableMessage
和
@Override
public String toString() {
return axis2message.getSoapEnvelope();
}
在尝试查看消息详细信息时,在获取ActiveMQ控制台中ID不匹配的错误后,我将private static final long serialVersionUID = 319132393668950267L;
设置为序列化时在WSO2端设置的long值。这可能会随着ESB的每次升级而改变,因为它很可能是由JVM设置的,因为我没有看到源代码中明确定义的那个。如果是这种情况,则需要更改serialVersionUID
类以反映新ID。
使用相同的jar路径构建修改后的类:
StorableMessage
您可以使用zip实用程序或jar命令将新的javac -cp synapse-core_2.1.2.wso2v4.jar StorableMessage.java
类添加(覆盖)到 synapse-core_2.1.2.wso2v4.jar 文件中。
最后一步是将更新的jar部署到 ACTIVEMQ_ROOT / lib 目录并退回ActiveMQ服务器。
我希望这有助于某人。 :)
答案 1 :(得分:2)
我面临同样的问题。
经过测试:
如果我使用WSO2 MB作为代理,我必须在WSO2 MB端手动创建队列以存储消息。在ActiveMQ中,队列会自动创建。
我希望此信息对解决错误很有用。