VM 协议

功能 > URI 协议 > VM 协议

协议语法:vm://logicalname

Javadocs:org.codehaus.activemq.transport.vm

VM 协议允许客户端在 VM 内部相互连接,而无需网络通信的开销。所使用的连接不是套接字连接,而是某种虚拟连接,它允许嵌入式消息传递系统。

需要注意的是,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 许可证 2.0 许可。