WSO2 ESB 存储和转发 - 发送消息时出现意外错误
WSO2 ESB store and forward - Unexpected error during sending message out
让 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.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.
您的消息处理器在哪里?理想情况下,您的消息处理器应该使用调用调解器调用后端服务。能否请您尝试以下步骤。
- 创建一个代理服务来接受消息并使用其中的商店中介将它们存储在您的 JDBC 商店中。
- 然后创建一个计划的消息转发处理器,它监听上面的 JDBC 存储并将消息转发到端点。如果需要,您可以指定任何回复顺序。否则请确保在上面的代理服务中设置以下 属性。
<property name="OUT_ONLY" value="true" />
- 如果您仍然无法找出错误,请启用
log4j.logger.httpclient.wire.header=DEBUG
获取线路日志
log4j.logger.httpclient.wire.content=DEBUG
在 log4j.properties 文件中 post 它在这里,以便我可以分析并帮助你。
- 如果您需要保证送达,则必须使用消息转发处理器。采样处理器用于实现可能导致消息丢失的节流相关用例。
- 更多信息请参考文章[1]。不要使用相同的突触配置,因为它有点过时了,而是使用 ESB Web 界面或开发人员工作室创建工件。否则,您可能 运行 由于缺少配置而陷入不同的错误。
让 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.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.
您的消息处理器在哪里?理想情况下,您的消息处理器应该使用调用调解器调用后端服务。能否请您尝试以下步骤。
- 创建一个代理服务来接受消息并使用其中的商店中介将它们存储在您的 JDBC 商店中。
- 然后创建一个计划的消息转发处理器,它监听上面的 JDBC 存储并将消息转发到端点。如果需要,您可以指定任何回复顺序。否则请确保在上面的代理服务中设置以下 属性。
<property name="OUT_ONLY" value="true" />
- 如果您仍然无法找出错误,请启用
log4j.logger.httpclient.wire.header=DEBUG
获取线路日志log4j.logger.httpclient.wire.content=DEBUG
在 log4j.properties 文件中 post 它在这里,以便我可以分析并帮助你。 - 如果您需要保证送达,则必须使用消息转发处理器。采样处理器用于实现可能导致消息丢失的节流相关用例。
- 更多信息请参考文章[1]。不要使用相同的突触配置,因为它有点过时了,而是使用 ESB Web 界面或开发人员工作室创建工件。否则,您可能 运行 由于缺少配置而陷入不同的错误。