【问题标题】:Why does my WSO2 EI (ESB) proxy service hang for 3 minutes?为什么我的 WSO2 EI (ESB) 代理服务会挂起 3 分钟?
【发布时间】:2018-02-21 20:42:57
【问题描述】:

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

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

  • 挂起发生在 ESB 代理中,就在输出序列之前。
  • 根据 Wireshark 的说法,当挂起发生时,ESB API 已经将其响应发送到 ESB 代理。

这个挂起正好需要 3 分钟的事实应该是一个提示。我在配置文件中搜索了指定 180 秒的任何内容,但唯一的是 http 套接字超时和 http transportReceiver 的 threadKeepAliveTime。如果我减少这些,BPS 会抛出 p2p 通信错误而不是继续。对我来说,这表明后台某处的某处仍然导致某些呼叫延迟 3 分钟。

顺便说一句,仅某些特定呼叫不会发生挂起。我已经测试了好几次,每次都执行完全相同的调用,我无法预测哪个调用会挂起,或者即使任何调用都会挂起。

【问题讨论】:

  • BPS收到响应后是否断开连接?
  • 您发送什么类型的请求:PUT、POST?您是否在没有请求正文的情况下发送它们?
  • @simar: 挂起后,BPS 收到正确的呼叫响应,并继续该过程,就好像什么都没发生一样。我已通过在 BPS 中启用跟踪来验证这一点。
  • @thanuja 我正在发送带有正文的 POST 请求
  • 如果你还没有这样做,试试这个:stackoverflow.com/questions/34722299/…

标签: wso2 wso2esb wso2bps wso2ei


【解决方案1】:

我建议您在faultSequence 中至少添加一个<send /> 调解器。 也许还可以添加一个简单的makefault 调解器(暂时不要让它太复杂 - 只需一个静态错误响应即可 - 在这个阶段你不希望故障源于 faultSequence)

我怀疑后端服务或输出序列中的一些错误,甚至可能没有处理 faultSequence - 这意味着代理不会向调用者发送响应,而是挂起直到超时

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

【讨论】:

  • 我的故障序列中已经有一个日志中介,现在添加了另一个日志中介和一个发送中介,但我在日志中看不到任何内容。我还尝试为 ESB 启用跟踪,但在这种情况下我无法重现该问题。似乎大量日志记录导致的减速阻止了问题的发生。我需要检查我的公司是否允许我分享实际的源代码。
  • 也许不是真正的源代码——你可以创建一个simple "shell" proxy like this,它只调用你的 ESB API。看看你是否可以重现这个问题。如果没有,那么您在代理中的附加代码可能有问题..
【解决方案2】:

当我尝试在没有请求正文的情况下调用 PUT 或 POST 方法时,有时我也有过同样的经历。但是,默认情况下,当 http 方法为 POST 或 PUT 时,WSO2 ESB 期望消息正文将请求发送到后端服务器。

我必须使用请求正文(至少是一个空的 JSON:{})发送请求,或者在您的 API 中使用属性 FORCE_POST_PUT_NOBODY。

阅读此post 了解有关如何使用 FORCE_POST_PUT_NOBODY 属性的更多详细信息。

【讨论】:

  • 在这种情况下,我发送带有正文的 POST 请求,我实际上看到请求被传递到后端服务并且后端服务响应(使用 Wireshark 进行检查)。所以不要认为这会是问题。
【解决方案3】:

如果您在 WSO2 中启用有线登录,您将意识到 NGIX 在请求中使用的是 HTTP 1.0 客户端。

为了解决这个问题,请将您的 NGINX 映射更改为使用“proxy_http_version 1.1;”问题就会得到解决。

干杯。

【讨论】:

    【解决方案4】:

    我最终得到了 WSO2 的支持。显然,我遇到了一些非常罕见的边缘情况,WSO2 工程师很难重现。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多