簡體   English   中英

JMS會話的目的是什么?

[英]What is the purpose of a JMS session?

JMS會話的目的是什么? 為什么單獨的連接不足以在發送者和接收者之間交換JMS消息?

見java.sun.com

Session對象是用於生成和使用消息的單線程上下文。 雖然它可以在Java虛擬機(JVM)之外分配提供程序資源,但它被視為輕量級JMS對象。

會話有幾個目的:

  • 它是消息生產者和消費者的工廠。
  • 它提供提供商優化的消息工廠。
  • 它支持一系列事務,這些事務將跨越生產者和消費者的工作結合到原子單元中。
  • 它定義了它消耗的消息的序列順序以及它產生的消息。
  • 它會保留消息,直到它們被確認為止。
  • 它序列化了使用其消息使用者注冊的消息偵聽器的執行。

會話可以創建和服務多個消息生成者和消費者。

一個典型的用法是在同步MessageConsumer上有一個線程塊,直到消息到達為止。 然后,線程可以使用Session的MessageProducers中的一個或多個。

我有同樣的問題,這就是我在這里的原因。 在這種情況下引用Doc並不是很有幫助,因為我確信OP的問題不是關於如何使用會話,或者他們做了什么,而是為什么它們確實存在,為什么不將它們的功能與Connection結合起來。 恕我直言,這是一個元問題。

松散地說Sessions本質上是一個線程的連接視圖,這是JMS規范在訪問后者時關於線程和Session之間關系的說法。

可以使用會話或其創建的任何對象的線程數沒有限制。 限制是多個線程不應同時使用會話的資源。 用戶應確保滿足此並發限制。 最簡單的方法是使用一個線程。 在異步傳送的情況下,使用一個線程在停止模式下進行設置,然后啟動異步傳送。 在更復雜的情況下,用戶必須提供顯式同步。

從消息傳遞的角度來看,它們具有邏輯工作單元。 這也是交易與Sessions結合的原因。

話雖如此,連接和會話之間通常會有1:1的映射。 這就是我認為JMSContext在2.0中引入的原因。 簡化事情。

看看OP發布的日期,我想我差不多十年了。 :d

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM