2016-11-29 35 views
0

拥有WSO2 BPS 3.6.0,我们有几个长时间运行的异步进程。我想在多个其他进程中重用一个进程(例如错误处理,通用程序,..)。WSO2 BPS BPEL重用异步进程

的问题是,在这种情况下,多个进程会暴露同一回调服务:

ERROR {org.wso2.carbon.bpel.core.ode.integration.store.TenantProcessStoreImpl} - Service: {http://xxx/bps/xxx}XXCallback already used by another process. Try again with a different service name 

如何倾听来自多个进程回调响应? (假设我可以提供相关性,因此正确的实例被调用)

我正在考虑为每个父进程(甚至公开相同的端口)提供一点点不同的服务名称(url片段?)并使用ReplyTo标头强制正确的回调url。我仍然不确定这是否正确。

回答

0

进程1 &进程2异步调用CommonProcess。

处理1 &过程2应该实现在Callback.wsdl定义

CommonProcess将调用在Callback.wsdl定义暗示 处理1 /过程2的操作的操作。

ProcessPackage1

  • Process1.bpel
  • Process1.wsdl
  • CommonProcess.wsdl
  • Callback.wsdl

ProcessPackage2

  • Process2.bpel
  • Process2.wsdl
  • CommonProcess.wsdl
  • Callback.wsdl

CommonProcessPackage

  • CommonProcess.bpel
  • CommonProcess.wsdl
  • Callback.wsdl

如何将Process1的EPR & Process2传递给CommonProcess进行回调?

这可以通过DynamicEndpoints完成。进程EPR可以在从Process1或Process2调用到CommonProcess期间在有效负载消息中传递。 CommonProcess将使用与传入消息一起传递的EPR覆盖与Callback.wsdl对应的partnelink EPR。

以下是演示Partnerlink EPR的演示示例。

https://github.com/apache/ode/tree/ode-1.3.x/distro/src/examples-war/DynPartner

此文档更上选择一些: http://ode.apache.org/endpoint-references.html

注:这是在Apache ODE上提供,并且可能会提供对WSO2。

+0

非常感谢!显然,我需要重命名父进程中的回调服务,但没关系。我正在考虑在寻址标题中发送回调URL,但到目前为止,我没有从消息中读取ReplyTo寻址标题。任何提示plz?作为回退,我仍然可以通过有效载荷中的回调URL(我不喜欢它) – gusto2

+0

AFAIK,处理通信的进程可能无法通过WSA头进行。 – Sathwik

+0

事实上,我通过有效载荷中的回调URL。快速和肮脏,但工作。我的想法是使用本地传输,但WSO2BPS中的一些错误迫使我使用绝对的http url(但是 - 它一直运行,直到我不更改端口)。 – gusto2