我配置了一个 BAM 服务器配置文件和一个流,以便将我的代理服务之一连接到我的 BAM,我错误地配置了我的 BAM 的 IP 地址。
当我向代理服务发送请求时,由于无法访问 BAM 服务器,调用失败。这是否意味着 ESB 和 BAM 之间的交换不是异步的,并且可能意味着我的代理服务失败?
不可以。虽然 BAM 中介是同步的,因为它是中介,但向 BAM 端发送数据的操作是异步完成的。这意味着如果 BAM 服务器由于某种原因(例如,不正确的 IP、BAM 不可用)而无法访问,ESB 仍然可以正常工作而没有任何问题。只有转储到 BAM 的消息会失败。这意味着中介序列将在服务器未找到异常的情况下正常运行,但不会发生消息记录。
在 BAM 中介器的开发过程中,我们考虑克隆整个消息并异步发送到 BAM 端,但我们拒绝了这个想法,因为内存克隆将花费大量时间和处理,这会减慢 ESB。但是数据发送部分(数据桥)仍然像上面提到的那样异步工作。
Nicolas, every mediator is synchronous in the chain. If you want to call the BAM asynchronously, what you need to do is:
1) Use the clone mediator to create an asynchronous thread (Sequential Mediation: NO, Continue Parent: YES). http://wso2.org/project/esb/java/4.0.0/docs/mediators/clone.html
2) In the cloned target do all your async work and place the BAM Agent Mediator.
That way you'll have your mediation working not only safer but also with better performance (since all the transformation you may need while preparing the information to be sent to BAM is happening asynchronously).