异步调用 API
使用异步调用 API 以基于应用程序会话标识,将需要在会话启动协议 (SIP) 应用程序会话中进行处理的事件传输到集群中的任何服务器。
异步调用 API 也称为异步工作分派器,可以使用相关应用程序会话标识将需要在 SIP 应用程序会话的上下文中处理的事件传输到集群中的任何服务器。这些传输通常由导致位于其他服务器上的 SIP 会话发生状态更改的事件触发。异步工作分派器将事件任务传输到要运行的正确服务器。
在 Websphere Application Server 中,会将所有相关 SIP 消息传递到集群中的相同服务器,且会话始终位于相同 SIP 容器中。要防止同步性问题和锁定,不能同时处理相同应用程序会话中的任务(即在不同线程或进程上),这会限制对特定类型事件进行处理。
要获取有关 SIP 会话和 SIP 应用程序会话及其关系的更为详细的信息,请参阅 Java™ 规范请求 (JSR) 289 的第 6 部分。
通过实现异步调用 API 解决以下两种场景。
- 与相同 SIP 应用程序会话相关的两个请求在两个不同线程上同时运行。例如,与消息驱动 bean (MDB) 一起使用的 Java EE (J2EE) 应用程序可以检索事件,以在特定 SIP 应用程序会话上发送 SIP 消息。同时,SIP 容器会在与相同应用程序会话连接的其他会话上收到入局 SIP 消息,并在不同线程上对其进行处理。将需要同步会话访问权,以避免出现竞争状态并确保同步所有会话属性。 在这种情况下,利用锁定机制将变得无效,因为 SIP 应用程序会话可能包含多个 SIP 会话。
- 不具有特定 SIP 应用程序会话的服务器收到请求,并通过非 SIP 协议在此会话的上下文中发送消息。例如,正在启动 SIP 对话框的 Web 服务可以位于不同于拥有其必须使用的 SIP 应用程序会话的服务器的其他服务器中。
异步调用 API 确保特定应用程序代码根据 SIP 应用程序会话标识在正确服务器和正确线程上运行。
异步调用 API 提供以下优势:
- 异步调用过程中最多涉及两个服务器:一个服务器检索工作任务,另一个服务器为处理此任务的 SIP 应用程序会话以及将任务传输到的目标服务器。
- 异步调用允许以线程安全的方式工作。 此方法确保仅一个线程处理与 SIP 应用程序会话有关的消息。因此,不需要同步此会话的访问权。
- 异步调用提供可扩展的解决方案。将更多服务器添加到集群时,不会影响性能。
- 需要时仅使用跨服务器调用,这会提高性能。