【问题标题】:WSO2 BPS BPEL Timeout when correlation not found未找到相关性时 WSO2 BPS BPEL 超时
【发布时间】:2016-11-25 14:59:04
【问题描述】:

使用 WSO2 BPS 3.6.0 - 我们有一个服务可以通知正在运行的 BPEL 流程有关事件。

在进程运行之前,它运行良好(使用相关性)。但是当这个过程已经完成时,请求没有得到任何响应。如果可以引发异常,我很好,但是没有任何响应很烦人。如果没有具有特定相关性的(活动)实例,有没有办法快速失败?

编辑:实际上,receive、pick 和 onEvent 活动的行为方式相同

提前谢谢你

【问题讨论】:

  • 看起来我们必须创建一个外部关联数据库表,如果实例仍然处于活动状态,调用服务将不得不查找

标签: wso2 apache-ode wso2bps


【解决方案1】:

Apache ODE 旨在将提前到达的传入消息排入队列。

示例:流程

接收1 -> 接收2 -> 接收3 ​​-> 回复3

Receive1:创建实例并启动关联。

Receive2:实例正在等待消息到达。

但是,Receive3 上的消息在 Receive2 之前提前到达,因此被排队。由于下面的activity是一个Reply3,它是一个同步调用,channel会超时等待响应。

一旦 Receive2 到达,引擎会看到 Receive3 的消息已经到达并完成实例。

现在,如果另一条消息以相同的相关值到达 Receive3,它会再次入队以供将来在使用相同相关值创建的新实例上使用。因此不会报告任何错误。

注意:这是 Apache ODE 的行为,除非 WSO2 更改了此行为。

【讨论】:

  • 感谢您的回复。我明白了。实际上,服务器的行为与您所描述的一样。因此,即使没有找到相关性,调用也会等待直到创建一个。看起来调用服务必须在调用 BPEL 端点之前检查相关性(业务对象)是否存在。
  • 只是好奇,为什么要查?
  • 在请求处理期间(可能需要几天或几周),客户端可能会提供与请求相关的更新或事件(由 onEvent 处理或使用相关性进行选择)。一旦该过程完成,必须拒绝任何后续更新。因此,超时确实不是一种选择。幸运的是,我们在 BPEL 服务器前面有一个 ESB,因此可以检查请求(业务对象)状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多