为什么我的WSO2 EI(ESB)代理服务挂起3分钟?

为什么我的WSO2 EI(ESB)代理服务挂起3分钟?,wso2,wso2esb,wso2bps,wso2ei,Wso2,Wso2esb,Wso2bps,Wso2ei,我有一个BPS流程,它可以快速执行对ESB代理的大量调用。ESB代理调用ESBAPI,ESBAPI调用我们自己产品的API 通常,BPS进程在等待ESB响应时会暂停整整3分钟。3分钟后,一切都在继续,好像什么都没发生。通过使用Wireshark和其他一些日志中介,我发现了以下几点: 挂起发生在ESB代理中,正好在out序列之前 根据Wireshark的说法,当挂起发生时,ESBAPI已经向ESB代理发送了响应 这次绞刑正好需要3分钟这一事实应该是一个暗示。我在配置文件中搜索了指定180秒的任

我有一个BPS流程,它可以快速执行对ESB代理的大量调用。ESB代理调用ESBAPI,ESBAPI调用我们自己产品的API

通常,BPS进程在等待ESB响应时会暂停整整3分钟。3分钟后,一切都在继续,好像什么都没发生。通过使用Wireshark和其他一些日志中介,我发现了以下几点:

  • 挂起发生在ESB代理中,正好在out序列之前
  • 根据Wireshark的说法,当挂起发生时,ESBAPI已经向ESB代理发送了响应
这次绞刑正好需要3分钟这一事实应该是一个暗示。我在配置文件中搜索了指定180秒的任何内容,但只有http套接字超时和http transportReceiver的threadKeepAliveTime。如果我减少这些,BPS将抛出一个p2p通信错误,而不是继续。对我来说,这表明在后台的某个地方仍有一些东西导致一些呼叫延迟3分钟


顺便说一下,挂起并不仅仅发生在某些特定的调用中。我已经测试了好几次,每次都执行完全相同的调用,我无法预测哪个调用将挂起,甚至无法预测是否有任何调用将挂起

我建议您在
故障序列中至少添加一个
中介。 也许还可以添加一个简单的
makefault
mediator(暂时不要让它太复杂-只需要一个静态错误响应就可以了-在这个阶段,您不希望错误源于faultSequence)

我怀疑后端服务或out sequence或faultSequence中的某些错误没有得到处理-这意味着代理不会将响应发送回调用方,而是挂起直到超时


PS:如果你也发布代理的源代码,那真的很有帮助。我建议你在
错误序列中至少添加一个
中介。 也许还可以添加一个简单的
makefault
mediator(暂时不要让它太复杂-只需要一个静态错误响应就可以了-在这个阶段,您不希望错误源于faultSequence)

我怀疑后端服务或out sequence或faultSequence中的某些错误没有得到处理-这意味着代理不会将响应发送回调用方,而是挂起直到超时


PS:如果你也发布代理的源代码,那真的很有帮助。

我以前也有过类似的经历,当时我尝试在没有请求主体的情况下调用PUT或post方法。但是,默认情况下,当http方法为POST或PUT时,WSO2 ESB希望消息体将请求发送到后端服务器

我要么发送带有请求主体的请求(至少是一个空JSON:{}),要么在API中使用FORCE_POST_PUT_NOBODY属性


阅读本文,了解有关如何使用FORCE\u POST\u PUT\u NOBODY属性的更多详细信息。

以前,我在没有请求主体的情况下尝试调用PUT或POST方法时也有过类似的经历。但是,默认情况下,当http方法为POST或PUT时,WSO2 ESB希望消息体将请求发送到后端服务器

我要么发送带有请求主体的请求(至少是一个空JSON:{}),要么在API中使用FORCE_POST_PUT_NOBODY属性


阅读本文,了解有关如何使用FORCE\u POST\u PUT\u NOBODY属性的更多详细信息。

我最终得到了WSO2支持。显然,我遇到了一些非常罕见的边缘案例,这对于WSO2工程师来说是很难重现的

最后,修复程序在代理服务中的发送中介之前添加了以下属性:

<property name="NO_KEEPALIVE" value="true" scope="axis2"/>

我最终得到了WSO2支持。显然,我遇到了一些非常罕见的边缘案例,这对于WSO2工程师来说是很难重现的

最后,修复程序在代理服务中的发送中介之前添加了以下属性:

<property name="NO_KEEPALIVE" value="true" scope="axis2"/>

如果在WSO2中启用wire log,您将意识到NGIX正在请求中使用HTTP 1.0客户端

为了解决这个问题,请将NGINX映射更改为使用“proxy\u http\u version 1.1;”,然后问题将得到解决


干杯。

如果在WSO2中启用wire log,您将意识到NGIX正在请求中使用HTTP 1.0客户端

为了解决这个问题,请将NGINX映射更改为使用“proxy\u http\u version 1.1;”,然后问题将得到解决


干杯。

BPS在收到响应后是否断开连接?您会发送什么类型的请求:PUT、POST?你是在没有请求正文的情况下发送的吗?@simar:挂起后,BPS会收到正确的呼叫响应,然后继续这个过程,就好像什么都没发生一样。我通过在BPS中启用跟踪来验证这一点。@thanuja我正在用Body发送POST请求。如果您还没有这样做,请尝试:BPS在收到响应后是否断开连接?您发送的请求类型是什么:PUT,POST?你是在没有请求正文的情况下发送的吗?@simar:挂起后,BPS会收到正确的呼叫响应,然后继续这个过程,就好像什么都没发生一样。我通过在BPS中启用跟踪验证了这一点。@thanuja我正在发送带有主体的POST请求。如果您还没有这样做,请尝试:在这种情况下,我正在发送带有主体的POST请求,我实际看到请求被传递到后端服务,后端服务正在响应(使用Wireshark对此进行了检查)。所以不要认为这是问题所在。在这种情况下,我发送带有主体的POST请求,我实际看到请求被传递到后端服务,后端服务响应(使用Wireshark对此进行了检查)。所以不要认为这会是问题所在。我的错误序列中已经有一个日志中介,现在添加了另一个日志中介和一个发送中介,但我在日志中什么也看不到。我也试过了