跳到主要内容

接收消息时的线程模型

在接收已发布消息时,上下文使用一个处理线程从套接字读取消息,解析它们,然后根据消息 API 的类型以及是否使用同步或异步模式,将消息排队以供传递或消费,或者执行客户端通知和消息分发。

客户端应用程序可以使用以下模式之一接收已发布消息:

  • 异步模式
    客户端应用程序可以使用 Java RTO、C 和 .NET API 异步接收已发布消息。更多信息请参阅“异步接收消息”。

  • 同步模式
    Java RTO、C 和 .NET API 只支持异步接收消息。客户端应用程序可以使用 PubSub+ JCSMP API 同步接收已发布消息。更多信息请参阅“同步接收消息”。


异步接收消息

客户端应用程序可以使用 Java RTO、C 和 .NET API 以异步方式接收消息。也就是说,当消息可用时,它们会自动从 API“推送”到客户端应用程序的消息回调或消息委托接口。

在异步接收消息时,上下文使用一个处理线程进行消费者通知并将排队的消息分发到消费者;所有从 API 到应用程序的回调(如消息接收回调、事件回调和定时器回调)都运行在上下文线程上。

当客户端应用程序使用异步事务性会话时,消息会从一个或多个事务性会话分发线程中分发。可以使用绑定到上下文的单个事务性会话分发线程(这是默认行为),或者使用绑定到每个事务性会话的独立事务性会话分发线程。更多信息请参阅“使用本地事务”。

Java RTO、C 和 .NET API

Java RTO、C 和 .NET API 的上下文异步接收消息的方式类似于 JCSMP 在启用 MESSAGE_CALLBACK_ON_REACTOR 会话属性时的方式。Java RTO、C 和 .NET API 的上下文仅使用一个处理线程。该线程从套接字读取消息,解析它们,然后执行消费者通知并将消息分发到消费应用程序。

对于 C API,所需的上下文线程可以由客户端应用程序提供,而不是依赖内部 API 线程。更多信息请参阅“C API 最佳实践”。

下图展示了通过 Java RTO、C 和 .NET API 异步接收消息时使用的上下文线程。

使用 Java RTO、C 和 .NET API 异步接收消息

img


同步接收消息

Java RTO、C 和 .NET API 只支持异步接收消息。