我試圖利用.NET Kaazing客戶端通過Web套接字與JMS後端進行交互。我正在努力理解會話的正確用法。起初,我不得不在所有線程共享一個會話,但我注意到,這是not supported:JMS客戶端會話使用
A Session object is a single-threaded context for producing and consuming messages. Although it may allocate provider resources outside the Java virtual machine (JVM), it is considered a lightweight JMS object.
我有一個會議的原因是,只是因爲我認爲這會產生更好的性能。由於文檔聲明的會話是輕量級的,我毫不猶豫地將我的代碼切換到每個「操作」使用會話。通過「操作」,我的意思是發送單個消息,或者訂閱隊列/主題。在前一種情況下,會話短暫並在消息發送後立即關閉。在後一種情況下,只要訂閱處於活動狀態,會話就需要存活。
當我試圖創建多個會話我得到了一個錯誤:
System.NotSupportedException: Only one non-transacted session can be active at a time
谷歌搜索這個錯誤是無果而終,所以我試圖切換到事務處理會話。但是,試圖創建一個消費者,當我得到一個不同的錯誤:
System.NotSupportedException: This operation is not supported in transacted sessions
這樣看來我是一個岩石和硬地之間卡住。我看到的唯一可能的選擇是在線程之間共享我的會話,或者讓一個單獨的非事務處理會話用於創建消費者,併爲其他事務處理多個事務處理會話。這兩種方法對我來說都顯得有點不利。
任何人都可以在我的客戶端處理會話時瞭解正確的方式嗎?
感謝您的回答,但你不真正解決我的問題。我不知道何時以及如何創建*會話* - 併發處理收到的消息不是我的問題。我目前的做法是創建一個單一的,長期的,非交易的會話,從中創建所有消費者。然後,對於我需要發送的每條消息,我創建一個短期的交易會話來發送消息。這似乎工作,但似乎相當複雜。你能評論我的方法嗎? –