我想了解如何通过 BPEL 以非阻塞方式调用存储过程。我担心我有一个正在调用的存储过程(在 DBAdpater 中),但它需要很长时间(大约 30 分钟),我不能等到它完成。
我正在尝试在复合应用程序中设置调用属性“nonBlockingInvoke”,但它不起作用,适配器一直阻塞,直到得到响应。
谢谢。
我想了解如何通过 BPEL 以非阻塞方式调用存储过程。我担心我有一个正在调用的存储过程(在 DBAdpater 中),但它需要很长时间(大约 30 分钟),我不能等到它完成。
我正在尝试在复合应用程序中设置调用属性“nonBlockingInvoke”,但它不起作用,适配器一直阻塞,直到得到响应。
谢谢。
Nonblockinginvoke 用于当您希望 Sync Invoke 分支有一个单独的执行线程时在 FLOW 中使用,因此它不会阻塞其他流。FLOW 是协作并行 - 不是真正的并行。调用期间同步调用仍会阻塞。在这里阅读更多。
无论如何,解决您的问题的一种方法是拥有一个新的组合,该组合调用 Async 组合,该组合使用 DB 适配器执行存储的过程。因此,您的新服务异步调用其他服务,因此它不会阻塞 - 但调用 db 适配器的服务会阻塞,但此时,您的调用程序是免费的。将数据库适配器调用包装在他们自己的组合中以将真正的服务实现与数据库服务接口分离/隔离并不是一个坏主意——这可能会发生变化。