VM 通訊協定

功能 > URI 通訊協定 > VM 通訊協定

通訊協定語法:vm://邏輯名稱

Javadocs:org.codehaus.activemq.transport.vm

VM 通訊協定允許客戶端在 VM 內部相互連接,而無需網路通訊的開銷。所使用的連線並非 Socket 連線,而是一種虛擬連線,允許內嵌訊息傳遞系統。

值得注意的是,JMS ObjectMessage 實例中的物件是使用序列化而非參考方式傳輸的。這聽起來可能令人驚訝,但這背後有非常充分的理由。

  1. 在一個設計良好的 J2EE 應用程式伺服器(從生產角度來看)中,您通常會擁有一個類別載入器階層,允許 EAR 和 WAR 在彼此之間以及伺服器內部使用的第三方函式庫之間完美隔離。如果您的客戶端位於不同的、隔離的類別載入器階層中,則共用參考將導致 ClassCastException。因此,它**必須**被序列化。
  2. 如果您要通過參考方式發送物件,它將被包裝在 ObjectMessage 中。那麼,沒有任何東西可以阻止您在發送之前進一步修改該物件。這聽起來似乎不是問題,但 TCK 測試正是針對這一點,這意味著您的 JMS 實作將不符合 J2EE 標準。因此,該物件**必須**被序列化。

如果當在您的應用程式中發送訊息時,內 VM JMS 效能是個問題,並且您知道您的訊息邊界受限於您的類別載入器範圍內,那麼您可以完全考慮使用超快的 VM 通訊協定,該通訊協定將通過參考方式發送訊息。由於上述原因,目前 ActiveMQ Classic 中不存在這種情況。

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 Apache 軟體基金會的商標。版權所有 © 2024,Apache 軟體基金會。根據Apache License 2.0 授權。