VM 传输参考
使用 ActiveMQ Classic > 配置传输 > ActiveMQ Classic 连接 URI > VM 传输参考
VM 传输
VM 传输允许客户端在 VM 内部互相连接,而无需网络通信开销。使用的连接不是套接字连接,而是使用直接方法调用,这使得嵌入式消息系统具有高性能。
第一个使用 VM 连接的客户端将启动一个嵌入式代理。后续连接将连接到同一个代理。一旦所有到代理的 VM 连接都关闭,嵌入式代理将自动关闭。
简单代理配置语法
这是 VM 连接的正常语法。它很简单,但只提供了有限的嵌入式代理配置。
vm://brokerName?transportOptions
如果您想连接到已经实例化的嵌入式代理(例如,在 Apache ServiceMix 的情况下),请确保在 **vm://brokerName** url 中使用的 brokerName 与正在运行的代理的 brokerName 相匹配。
传输选项
选项名称 | 默认值 | 描述 |
---|---|---|
marshal | false | 如果为 true,则强制通过传输发送的每个命令使用 WireFormat 进行编组和解组。 |
wireFormat | default | 要使用的 WireFormat 的名称 |
wireFormat.* | 所有以该前缀开头的属性都用于配置 wireFormat。 | |
create | true | 如果代理应该按需创建,如果它尚不存在。 |
waitForStart | -1 | 如果 > 0,则表示等待代理启动的超时时间(以毫秒为单位)。值 -1 和 0 表示不等待。仅在 ActiveMQ Classic 5.2+ 中受支持。 |
broker.* | 所有以该前缀开头的属性都用于配置代理。有关更多信息,请参见 配置线格式。 |
示例 URI
vm://broker1?marshal=false&broker.persistent=false
小心嵌入式代理
如果您使用的是 VM 传输,并且希望显式配置 嵌入式代理,那么您可能会在代理启动之前创建 JMS 连接。目前 ActiveMQ Classic 会在您使用 VM 传输且没有配置代理的情况下自动创建代理。(在 5.2 中,可以使用 waitForStart 和 create=false 选项来配置连接 uri)
因此,为了解决这个问题,如果您使用的是 Spring,您可能希望使用 **depends-on** 属性,以便您的 JMS 连接工厂依赖于嵌入式代理,以避免这种情况发生。例如:
<bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">
<property name="config" value="classpath:org/apache/activemq/xbean/activemq.xml" />
<property name="start" value="true" />
</bean>
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" depends-on="broker">
<property name="brokerURL" value="vm://127.0.0.1"/>
</bean>
高级代理配置语法
这是 VM 连接的高级语法。它允许您使用 代理配置 URI 更广泛地配置代理。
vm:(broker:(tcp://127.0.0.1)?brokerOptions)?transportOptions
或者
vm:broker:(tcp://127.0.0.1)?brokerOptions
传输选项
选项名称 | 默认值 | 描述 |
---|---|---|
marshal | false | 如果为 true,则强制通过传输发送的每个命令使用 WireFormat 进行编组和解组。 |
wireFormat | default | 要使用的 WireFormat 的名称 |
wireFormat.* | 所有以该前缀开头的属性都用于配置 wireFormat。 |
关于优化 VM 传输的使用,还有 更多选项。
示例 URI
vm:(broker:(tcp://127.0.0.1:6000)?persistent=false)?marshal=false
使用外部配置文件配置嵌入式代理
要使用 vm 传输启动嵌入式代理并使用外部配置文件(例如 activemq.xml)对其进行配置,请使用以下 URI
vm://127.0.0.1?brokerConfig=xbean:activemq.xml