跳到主要内容

在PubSub+ JCSMP API中使用本地事务

本节描述了如何在 PubSub+ JCSMP API 中使用事务会话来发布和/或接收一系列保证消息,这些消息作为一个称为本地事务的单一原子单元。本地事务仅依赖于单一资源(PubSub+ 事件代理)来为消息客户端提供服务。

事务会话使客户端应用程序能够将多个保证消息的发送和/或接收操作组合在一起,作为一个称为事务的单一原子单元。只有保证消息(即具有持久或非持久投递模式的消息)可以通过事务发布或接收;直接消息不能用于事务。

要以事务方式发布和/或消费消息,客户端应用程序必须在会话中创建一个事务会话。然后,在该事务会话中,客户端应用程序可以建立一个生产者流(即,发布者流)以在事务中发布消息,和/或建立一个消费者流(即,订阅者流)以在事务中接收消息。尽管管理员可以修改此值,但默认情况下,客户端可以在单个事务中发布和/或消费多达 256 条保证消息。有关详细信息,请参阅配置每个事务的最大消息数。

在事务中发布和接收的消息会在事件代理上暂存。要完成事务中的所有消息发送和接收操作,必须提交事务。或者,也可以回滚事务,从而取消其所有发布和接收操作。一旦事务完成,另一个事务将自动开始。

下图显示了客户端如何在单个事务会话中同时使用生产者和消费者。在此情况下,当客户端提交事务时,消费者从端点接收暂存的消息 A,同时消息 B 和 C 被发布到同一目标端点。

事务和提交

img

有关如何使用本地事务的示例,请参阅 Solace 开发者中心上的 Transactions 示例。

线程注意事项

事务会话仅支持单线程使用(例外情况是任何应用程序线程都可以调用 close()destroy() 来关闭事务会话)。属于事务会话的所有生产者和消费者流必须由同一线程顺序访问。

同步消费者

当使用同步消息消费者时,发送和接收操作由单个应用程序线程完成,此线程必须提交或回滚事务。应用程序线程对事务会话的生产者和消费者进行序列化访问。

异步消费者

当使用异步消息消费者时,API 所有的线程将消息传递给注册的消息监听器。此线程用于发送消息,且此线程必须提交或回滚事务。API 线程对事务会话的生产者和消费者进行序列化访问。