4

这个问题不好问。所以我会尽力问清楚。我们已经有一个企业 SOA 套件 10G 系统正在运行。一个小过程,我就这样解释。

Consumer->ESB->BPEL->ESB->Provider Webservice

消费者调用我们的一个 ESB 流程,该流程又将请求转发给 BPEL,BPEL 再次调用另一个 ESB。这个最终的 ESB 调用由我们的提供者提供的外部 WebService。

现在让它更清楚。

Consumer C1--WSDLExt1-->ESB1-->WSDLInt1-->BPEL--WSDLInt1-->ESB2--WSDLExt2-->Provider Webservice

  • 为了解释这一点,Consumer 是 C1,而我们的第一个 ESB 是 ESB1。它们之间使用的 WSDL 是 WSDLExt1。
  • ESB1,在转换之后将请求转发给 BPEL。然后 BPEL 将请求转发到 ESB2。由于 ESB2 和 BPEL 使用相同的 WSDLInt1,因此 BPEL 中没有转换
  • 然后 ESB2 转换请求并将其发送到 Provider Webservice。ESB2 和Provider Webservice 之间使用的WSDL 是WSDLExt2。

现在问题来了。现在由于一个奇怪的新需求,我们必须在 WSDLExt2 中添加一个新操作。注意:只有一个新的操作。但转折来了。1.假设,对于一个新的操作,我定义了新的消息。2. 或者我继续使用 WSDL 中已经存在的(定义的)消息来进行这个新操作。

在每种情况下,我都需要修改 WSDLint1 并反过来修改 BPEL 吗?

总之,我的问题是,增加一个新的操作,会对之前调用它的流程有影响吗?这会导致任何故障吗?

4

1 回答 1

1

ESB 的作用/优势之一是保护例如 BPEL 免受此类更改的影响。ESB在这里充当代理,在 ESB 内部调用 BPEL 时发生的消息路由/中介对 BPEL 不可见。

因此,WSDLExt2只要您不触及WSDLInt1定义(及其数据类型等),更改就不会影响 BPEL。

如果您不打算通过 BPEL 使用这个新操作,那么您不需要修改 BPEL 或WSDLInt1.

由 ESB 代理的中的一个操作WSDLInt1也将调用 的情况WSDLExt2,这都可以在 ESB 级别内部处理,并且可以透明地完成,这样 BPEL 就不会注意到任何变化。在 ESB 术语中,这可以称为翻译和转换/协议转换/服务编排

于 2012-12-13T00:45:16.857 回答