【问题标题】:WSO2 ESB store and forward - Unexpected error during sending message outWSO2 ESB 存储和转发 - 发送消息时出现意外错误
【发布时间】:2016-12-06 08:54:18
【问题描述】:

让 WSO2 5.0.0 尝试使用 JDBC 消息存储实现存储和转发模式。

向目标端点发送消息会引发异常:

TID: [-1234] [] [2016-12-05 23:25:24,874] ERROR {org.apache.synapse.message.processor.impl.sampler.SamplingService} -  Error occurred while executing the message {org.apache.synapse.message.processor.impl.sampler.SamplingService}
org.apache.synapse.SynapseException: Unexpected error during sending message out
    at org.apache.synapse.core.axis2.Axis2Sender.handleException(Axis2Sender.java:257)
    at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:84)
    at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:548)
    at org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:382)
    at org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65)
    at org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55)
    at org.apache.synapse.mediators.builtin.CallMediator.handleNonBlockingCall(CallMediator.java:221)
    at org.apache.synapse.mediators.builtin.CallMediator.mediate(CallMediator.java:99)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
    at org.apache.synapse.message.processor.impl.sampler.SamplingService$1.run(SamplingService.java:211)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:538)
    at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:78)
    ... 15 more

我认为我缺少重要的传输、Axis2 或 Synapse 属性,但我找不到哪个。

要存储和转发的序列是here

我试图找出 in the source codes 可能导致 NullPointerException 的原因,但对我来说这没有任何意义,因为定义了 httpMethod 和 messageType。

谢谢大家的提示

编辑: 根据评论,正在使用的 Synapse 源是 here

【问题讨论】:

  • 哦,感谢您的更新。解决此问题的最佳方法是什么?看起来 originalInMsgCtx 或 getOperationContext() 可能为 null :(
  • 嗯。我想很可能 originalInMsgCtx.getOperationContext() 为空。如果 originalInMsgCtx 为空,您应该在到达该行之前获得 NPE
  • 我认为您可以通过将消息从计划任务注入代理服务而不是注入序列来解决此问题。在代理服务内部,可以调用您的序列。你可以这样试试吗?
  • 好主意,我试试看。

标签: wso2 wso2esb synapse


【解决方案1】:

您的消息处理器在哪里?理想情况下,您的消息处理器应该使用调用中介调用后端服务。请您尝试以下步骤。

  1. 创建一个代理服务来接受消息并使用其中的存储中介将它们存储在您的 JDBC 存储中。
  2. 然后创建一个调度消息转发处理器,它监听上述 JDBC 存储并将消息转发到端点。如果需要,您可以指定任何回复顺序。否则,请确保在上面的代理服务中设置以下属性。 <property name="OUT_ONLY" value="true" />
  3. 如果您仍然无法找出错误,请通过启用log4j.logger.httpclient.wire.header=DEBUG 获取线路日志 log4j.logger.httpclient.wire.content=DEBUG 在 log4j.properties 文件中并将其发布在此处,以便我分析和帮助您。
  4. 如果您需要保证传递,您必须使用消息转发处理器。采样处理器用于实现可能导致消息丢失的节流相关用例。
  5. 有关详细信息,请参阅文章 [1]。不要使用相同的突触配置,因为它有点过时了,而是使用 ESB Web 界面或开发人员工作室创建工件。否则你可能会因为缺少配置而遇到不同的错误。

[1]http://wso2.com/library/articles/2014/01/guaranteed-delivery-with-Message-Store-Message-Processor%20/

【讨论】:

  • 谢谢大家,确实使用带有本地代理的转发处理器(在调用外部服务之前做一些工作)就可以了。我仍然在与 PostgreSQL 支持的 JDBC 存储作斗争(当我在合理的时间内找不到解决方案时,我会打开另一个线程)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 2017-01-08
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多