我正在尝试利用 .NET Kaazing 客户端通过 Web 套接字与 JMS 后端进行交互。我正在努力理解会话的正确用法。最初,我有一个跨所有线程共享的会话,但我注意到这不受支持:
Session 对象是用于产生和使用消息的单线程上下文。尽管它可以在 Java 虚拟机 (JVM) 之外分配提供者资源,但它被视为轻量级 JMS 对象。
我只有一个会话的原因只是因为我认为这会产生更好的性能。由于文档声称会话是轻量级的,我毫不犹豫地切换我的代码以使用每个“操作”的会话。“操作”是指发送单个消息或订阅队列/主题。在前一种情况下,会话是短暂的,并在消息发送后立即关闭。在后一种情况下,只要订阅处于活动状态,会话就需要存在。
当我尝试创建多个会话时,出现错误:
System.NotSupportedException: Only one non-transacted session can be active at a time
谷歌搜索这个错误没有结果,所以我尝试切换到事务会话。但是当试图创建一个消费者时,我得到一个不同的错误:
System.NotSupportedException: This operation is not supported in transacted sessions
所以看起来我被困在一块石头和一个坚硬的地方之间。我看到的唯一可能的选择是跨线程共享我的会话,或者使用单个非事务会话来创建消费者,并使用多个事务会话来创建其他所有会话。这两种方法对我来说似乎都有些不合时宜。
任何人都可以阐明我在客户中处理会话的正确方法吗?