跳到主要内容

创建上下文

上下文用于组织应用程序与 Solace PubSub+ 事件代理之间的通信。每个客户端应用程序至少必须使用一个上下文。上下文作为容器,其中可以配置一个或多个会话,并且可以处理与会话相关的事件。它封装了驱动网络 I/O 和消息传递通知的线程,这些线程与该上下文关联的会话和会话组件相关。

上下文属性用于规定上下文的行为。如果没有指定特定的上下文属性,则使用默认值。有关上下文属性的信息,请参阅相应消息 API 的 API 开发者在线参考 文档。

回调和委托

当使用 C 或 .NET API 时,所有从 API 到应用程序的回调或委托调用(例如,消息接收回调、事件回调和计时器回调)都从上下文线程运行。为了获得最佳性能,开发用于 Solace PubSub+ 的应用程序时应遵循以下规则:

  • 上下文线程必须运行,以检测流量控制的缓解并解除等待的应用程序线程的阻塞。
  • 上下文线程必须运行,以完成会话连接序列并解除等待连接完成的应用程序的阻塞。
  • 上下文线程必须运行,以解除等待订阅请求确认的应用程序的阻塞。

因此,应用程序不得在回调/委托例程中阻塞,因为这可能会导致应用程序死锁,或者至少严重降低接收性能。在回调例程中运行过长时间会阻止 API 解除可能正在等待发送消息确认或其他应用程序线程在流量控制情况下被阻塞的其他应用程序线程的阻塞。

要创建上下文,请调用下表中适用于消息 API 的方法或函数。创建后,上下文将自动启动。

PubSub+ 消息 API使用
JCSMPJCSMPFactory.createContext(...)
Java RTOSolclient.createContextForHandle(...)
CsolClient_context_create(...)
.NETContextFactory.CreateContext(...)
JavaScript 和 Node.js不适用

要创建上下文

相关示例

有关如何为 Java RTO、C 和 .NET API 创建上下文的示例,请参阅 DirectPubSub 示例。

PubSub+ 消息 API使用
JCSMPContext.destroy()
Java RTOContextHandle.destroy()
CsolClient_context_destroy(...)
.NETIContext.Dispose()
JavaScript 和 Node.js不适用

要销毁上下文

上下文计时器

当使用 C 或 .NET API 时,上下文可以使用计时器来执行计划任务。这些任务保证在与注册计时器任务的上下文驱动的线程上执行。

上下文计时器依赖于定义的回调或委托,这允许在设置的时间间隔到期时在上下文的线程中调用回调例程。可以使用重复或一次性(即,一次性)回调/委托。例如,计时器可以用于在设置的时间间隔发布消息,或者执行一次异步操作。

要启动上下文计时器,请调用下表中列出的方法或函数。您必须传入要启动的计时器类型(一次性或重复)、请求的计时器持续时间(以毫秒为单位)以及计时器到期时要调用的回调例程或委托。

当计时器到期时,将调用指定的计时器回调例程。如果是重复计时器,计时器将自动重新安排相同的持续时间,并继续运行,直到计时器停止。如果是一次性计时器,计时器将自动取消。

PubSub+ 消息 API使用
JCSMP不适用
Java RTO不适用
CsolClient_context_startTimer(...)
.NETTimerTask.Start(...)
JavaScript 和 Node.js不适用

要启动上下文计时器

上下文、会话、流或计时器不得在回调中释放。

相关示例

有关如何为 C API 创建上下文计时器的示例,请参阅 dtoPubSub 示例。