【发布时间】:2018-01-11 10:37:24
【问题描述】:
问题在于运行 wso2esb v.5 的服务器,其 API 非常简单。
<api context="/epc/v2" name="oldPgmType-API" statistics="enable" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="HEAD GET" uri-template="/OldPgmType/*">
<inSequence>
<property name="Authorization" scope="transport" type="STRING" value="Basic cdsdsdsdsdsdsdsds=="/>
<header name="Accept" scope="transport" value="application/xml"/>
<send>
<endpoint key="gov:endpoints/epc/epc_api_endpoint.xml"/>
</send>
</inSequence>
<outSequence>
<log description="After response" level="full">
<property name="message" value="After response LOG"/>
</log>
<header name="Accept" scope="transport" value="application/xml"/>
<sequence key="gov:sequences/common/outAcceptSequence.xml"/>
<send/>
</outSequence>
<faultSequence/>
</resource>
</api>
我是新的 esb 经理,有人告诉我几周前问题不存在,我看不到配置文件有任何变化。顺便说一句,同一个中介在我的开发机器上工作正常(运行 wso2ei61)。
当然,我检查了端点是否可以从服务器 curl 访问。
日志中的错误没有延迟,所以这不是超时问题。
这里是日志:
调试 {org.apache.synapse.transport.http.wire} - HTTPS-Listener I/O dispatcher-3 >> "GET /epc/v2/OldPgmType/intitComplet/L/2017/francais/psp1ba HTTP/1.1 [\r][\n]" {org.apache.synapse.transport.http.wire} 调试 {org.apache.synapse.transport.http.wire} - HTTPS-Listener I/O dispatcher-3 >> “主机:esb-test.sipr.ucl.ac.be:8243[\r][\n] " {org.apache.synapse.transport.http.wire} 调试 {org.apache.synapse.transport.http.wire} - HTTPS-Listener I/O dispatcher-3 >> "User-Agent: curl/7.54.0[\r][\n]" {org.apache. synapse.transport.http.wire} 调试 {org.apache.synapse.transport.http.wire} - HTTPS-Listener I/O dispatcher-3 >> “接受:/[\r][\n]” {org.apache .synapse.transport.http.wire} 调试 {org.apache.synapse.transport.http.wire} - HTTPS-Listener I/O dispatcher-3 >> "[\r][\n]" {org.apache.synapse.transport.http.wire} DEBUG {org.apache.synapse.core.axis2.SynapseMessageReceiver} - Synapse 收到一条用于消息中介的新消息... {org.apache.synapse.core.axis2.SynapseMessageReceiver} 调试 {org.apache.synapse.core.axis2.SynapseMessageReceiver} - 接收到:/epc/v2/OldPgmType/intitComplet/L/2017/francais/psp1ba {org.apache.synapse.core.axis2.SynapseMessageReceiver} 调试 {org.apache.synapse.core.axis2.SynapseMessageReceiver} - SOAPAction:空 {org.apache.synapse.core.axis2.SynapseMessageReceiver} 调试 {org.apache.synapse.core.axis2.SynapseMessageReceiver} - WSA 操作:空 {org.apache.synapse.core.axis2.SynapseMessageReceiver} 调试 {org.apache.synapse.core.axis2.Axis2SynapseEnvironment} - 注入 MessageContext {org.apache.synapse.core.axis2.Axis2SynapseEnvironment} 调试 {org.apache.synapse.rest.API} - API 上下文:/learning/v1 与请求 URI 不匹配:/epc/v2/OldPgmType/intitComplet/L/2017/francais/psp1ba {org.apache.synapse.rest .API} 调试 {org.apache.synapse.rest.API} - API 上下文:/students/v0 与请求 URI 不匹配:/epc/v2/OldPgmType/intitComplet/L/2017/francais/psp1ba {org.apache.synapse.rest .API} 调试 {org.apache.synapse.rest.RESTRequestHandler} - 定位特定 API:oldPgmType-API 用于处理消息 {org.apache.synapse.rest.RESTRequestHandler} DEBUG {org.apache.synapse.rest.API} - 通过 API:oldPgmType-API {org.apache.synapse.rest.API} 处理 ID 为 urn:uuid:f525b130-d4ec-412b-9d1d-3b46edd34364 的消息 DEBUG {org.apache.synapse.rest.Resource} - 通过资源: 51f40a319374b54aab115c882a9738df58dd6604358b59fb {org.apache.synapse.Resource} 调试 {org.apache.synapse.mediators.base.SequenceMediator} - 开始:序列 {org.apache.synapse.mediators.base.SequenceMediator} 调试 {org.apache.synapse.mediators.base.SequenceMediator} - 序列 :: mediate() {org.apache.synapse.mediators.base.SequenceMediator} DEBUG {org.apache.synapse.mediators.base.SequenceMediator} - 中介从中介位置开始:0 {org.apache.synapse.mediators.base.SequenceMediator} 调试 {org.apache.synapse.mediators.builtin.PropertyMediator} - 开始:属性中介 {org.apache.synapse.mediators.builtin.PropertyMediator} 调试 {org.apache.synapse.mediators.builtin.PropertyMediator} - 设置属性:授权范围:传输到:基本 cxxxx==(即常量:基本 cxxxx==){org.apache.synapse.mediators.builtin.PropertyMediator } 调试 {org.apache.synapse.mediators.builtin.PropertyMediator} - 结束:属性中介 {org.apache.synapse.mediators.builtin.PropertyMediator} 调试 {org.apache.synapse.mediators.transform.HeaderMediator} - 开始:标头中介 {org.apache.synapse.mediators.transform.HeaderMediator} 调试 {org.apache.synapse.mediators.transform.HeaderMediator} - 设置 HTTP 标头:接受:application/xml {org.apache.synapse.mediators.transform.HeaderMediator} 调试 {org.apache.synapse.mediators.transform.HeaderMediator} - 结束:标头中介 {org.apache.synapse.mediators.transform.HeaderMediator} 调试 {org.apache.synapse.mediators.builtin.SendMediator} - 开始:发送中介 {org.apache.synapse.mediators.builtin.SendMediator} 调试 {org.apache.synapse.endpoints.IndirectEndpoint} - 使用密钥加载真实端点:gov:endpoints/epc/epc_api_endpoint.xml {org.apache.synapse.endpoints.IndirectEndpoint} DEBUG {org.apache.synapse.registry.AbstractRegistry} - 缓存对象的键已过期:gov:endpoints/epc/epc_api_endpoint.xml {org.apache.synapse.registry.AbstractRegistry} DEBUG {org.apache.synapse.registry.AbstractRegistry} - 过期版本号与注册表 {org.apache.synapse.registry.AbstractRegistry} 中的当前版本相同 DEBUG {org.apache.synapse.registry.AbstractRegistry} - 将缓存租约再续订 15 秒 {org.apache.synapse.registry.AbstractRegistry} DEBUG {org.apache.synapse.endpoints.EndpointContext} - 检查端点:地址为https://remote_server.be/WebApi/resources的epc_api_endpoint目前处于暂停状态是否可以使用? {org.apache.synapse.endpoints.EndpointContext} 调试 {org.apache.synapse.endpoints.EndpointContext} - 端点:epc_api_endpoint 地址为https://remote_server.be/WebApi/resources,当前已暂停,现在可以重试 {org.apache.synapse.endpoints.EndpointContext} 调试 {org.apache.synapse.endpoints.AddressEndpoint} - 通过端点发送消息:epc_api_endpoint 解析为地址 = https://remote_server.be/WebApi/resources {org.apache.synapse.endpoints.AddressEndpoint} 调试 {org.apache.synapse.endpoints.AddressEndpoint} - SOAPAction:空 {org.apache.synapse.endpoints.AddressEndpoint} 调试 {org.apache.synapse.endpoints.AddressEndpoint} - WSA 操作:空 {org.apache.synapse.endpoints.AddressEndpoint} {org.apache.synapse.core.axis2.Axis2FlexibleMEPClient} {org.apache.synapse.core.axis2.Axis2FlexibleMEPClient} 调试 {org.apache.synapse.core.axis2.Axis2FlexibleMEPClient} - 设置端点超时:端点 [epc_api_endpoint],URI:https://remote_server.be/WebApi/resources/OldPgmType/intitComplet/L/2017/francais/psp1ba 到静态超时值:60000 {org.apache.synapse.core.axis2.Axis2FlexibleMEPClient} 调试 {org.apache.synapse.core.axis2.SynapseCallbackReceiver} - 添加了回调。等待的回调总数:1 {org.apache.synapse.core.axis2.SynapseCallbackReceiver} 错误 {org.apache.synapse.core.axis2.Axis2Sender} - 发送消息时出现意外错误 {org.apache.synapse.core.axis2.Axis2Sender} java.lang.NullPointerException 在 org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:255) 在 org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) 在 org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:185) 在 org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:167) 在 org.apache.axis2.client.OperationClient.execute(OperationClient.java:149) 在 org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:581) 在 org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:78) 在 org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:548) 在 org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:382) 在 org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65) 在 org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55) 在 org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:121) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59) 在 org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) 在 org.apache.synapse.rest.Resource.process(Resource.java:343) 在 org.apache.synapse.rest.API.process(API.java:399) 在 org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:123) 在 org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:101) 在 org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:69) 在 org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:304) 在 org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:75) 在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 在 org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:325) 在 org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:158) 在 org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) WARN {org.apache.synapse.core.axis2.SynapseMessageReceiver} - 由于遇到异常而执行故障处理程序 {org.apache.synapse.core.axis2.SynapseMessageReceiver} 警告 {org.apache.synapse.FaultHandler} - ERROR_CODE:0 {org.apache.synapse.FaultHandler} WARN {org.apache.synapse.FaultHandler} - ERROR_MESSAGE:发送消息时出现意外错误 {org.apache.synapse.FaultHandler} WARN {org.apache.synapse.FaultHandler} - ERROR_DETAIL:org.apache.synapse.SynapseException:发送消息时出现意外错误 在 org.apache.synapse.core.axis2.Axis2Sender.handleException(Axis2Sender.java:257) 在 org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:84) 在 org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:548) 在 org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:382) 在 org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:65) 在 org.apache.synapse.endpoints.IndirectEndpoint.send(IndirectEndpoint.java:55) 在 org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:121) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:97) 在 org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:59) 在 org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158) 在 org.apache.synapse.rest.Resource.process(Resource.java:343) 在 org.apache.synapse.rest.API.process(API.java:399) 在 org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:123) 在 org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:101) 在 org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:69) 在 org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:304) 在 org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:75) 在 org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 在 org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:325) 在 org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:158) 在 org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745) 引起:java.lang.NullPointerException 在 org.apache.synapse.transport.passthru.PassThroughHttpSender.invoke(PassThroughHttpSender.java:255) 在 org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) 在 org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:185) 在 org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:167) 在 org.apache.axis2.client.OperationClient.execute(OperationClient.java:149) 在 org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:581) 在 org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:78) ... 22 更多 {org.apache.synapse.FaultHandler} WARN {org.apache.synapse.FaultHandler} - ERROR_EXCEPTION:org.apache.synapse.SynapseException:发送消息时出现意外错误 {org.apache.synapse.FaultHandler} {org.apache.synapse.FaultHandler} DEBUG {org.apache.synapse.endpoints.AddressEndpoint} - 发送到端点 [epc_api_endpoint] 时遇到非超时错误,错误代码:0 {org.apache.synapse.endpoints.AddressEndpoint} 遇到致命错误:0 {org.apache.synapse.endpoints.AddressEndpoint} 警告 {org.apache.synapse.endpoints.EndpointContext} - 端点:地址为 https://remote_server.be/WebApi/resources 的 epc_api_endpoint 将被标记为 SUSPENDED,因为它失败了 {org.apache.synapse.endpoints.EndpointContext} WARN {org.apache.synapse.endpoints.EndpointContext} - 挂起端点:地址为https://remote_server.be/WebApi/resources 的 epc_api_endpoint - 上次挂起持续时间为:30000 毫秒,当前挂起持续时间为:30000 毫秒 - 下次重试时间:1 月 11 日星期四 11:11:19 CET 2018 {org.apache.synapse.endpoints.EndpointContext} WARN {org.apache.synapse.FaultHandler} - FaultHandler 执行 impl:org.apache.synapse.mediators.MediatorFaultHandler {org.apache.synapse.FaultHandler} WARN {org.apache.synapse.mediators.MediatorFaultHandler} - 执行故障处理程序调解器:org.apache.synapse.mediators.base.SequenceMediator {org.apache.synapse.mediators.MediatorFaultHandler} 调试 {org.apache.synapse.mediators.base.SequenceMediator} - 开始:序列 {org.apache.synapse.mediators.base.SequenceMediator} 调试 {org.apache.synapse.mediators.base.SequenceMediator} - 序列 :: mediate() {org.apache.synapse.mediators.base.SequenceMediator} DEBUG {org.apache.synapse.mediators.base.SequenceMediator} - 中介从中介位置开始:0 {org.apache.synapse.mediators.base.SequenceMediator} 调试 {org.apache.synapse.mediators.base.SequenceMediator} - 结束:序列 {org.apache.synapse.mediators.base.SequenceMediator}
还有一些跟踪日志......我不明白“hasNoneAddress”报告的含义:
[MessageContext: logID=a34940bd3f8e646a16843a00ed0866c21ae079eebf2d461e] 发送:urn:uuid:b6efe071-834b-49b8-963a-3641660b921b {org.apache.axis2.engine.AxisEngine} TRACE - [MessageContext: ....] 寻址已禁用。不添加 WS-Addressing 标头。 {org.apache.axis2.handlers.addressing.AddressingOutHandler} 调试 - [MessageContext: ....] isReplyRedirected:ReplyTo 为空。返回错误 {org.apache.axis2.addressing.AddressingHelper} TRACE - hasAnonymousAddress: https://remote_server/xxx/yyy 是匿名的: false {org.apache.axis2.addressing.EndpointReference} TRACE - hasNoneAddress: https://remote_server/xxx/yyy 是 None: false {org.apache.axis2.addressing.
应感谢任何帮助。 伯纳德
【问题讨论】:
-
这里是 API:
-
我忘了说其他API也有同样的问题
-
您尝试发布的 API (url) 不可见(可能 URL 被阻止?)我尝试了 remote_server.be 但没有响应 :) 很难看到这里发生了什么。会不会是 ESB 过去某处内存不足,需要重新启动?
-
出于安全原因,我不想在这里发布我们的 esb 请求的真实 URL,这就是为什么我用“remote_server”写这篇文章的原因。无论如何,该远程服务器的 URL 在这里无关紧要,因为问题存在于多个 API(具有不同的后端)。此外,远程应用程序是可访问的,并使用 curl 命令响应 shen 请求。最后但并非最不重要的一点是,在 esb 服务器上使用工具“tcpdump”向我显示在错误期间绝对没有来自 esb 的请求。
-
很难说,可能是您的注册表或端点定义出现了一些奇怪的问题。一些建议: - 重新启动? - 使用 esb 的副本在本地复制?- 使用“呼叫”而不是发送进行测试? - 使用嵌入式端点而不是注册表端点进行测试?
标签: wso2esb