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