4.4在VM内部连接到activeMQ

[size=medium]VM连接器被java应用用来打开嵌入式代理并连上它。使用它意味着在客户端和嵌入式代理间没有网络连接被建立。它们通过代理对象的方法调用直接交互。因为没有应用网络栈,性能提升显著。代理在使用VM协议进行第一次连接的时候开启。之后所有VM交互链接如果是对应同一个虚拟机,那么会连接同一个代理。
用VM协议创建的代理不缺少ActiveMQ的任何基本特性。所以,举例来说,它也能被其他连接器配置。当所有使用VM协议连接代理的客户端关闭了它们的连接,代理会自动关闭。
VM连接的URI语法如下:
vm://brokerName?key=value
代理名字在VM连接器URI中扮演了重要的角色,它唯一指定了代理。比如,你可以通过不同的代理名字创建不同的代理。代理名字是唯一需要不同的地方。
传输选项使用URI查询部分来设置,就像之前讨论的连接器一样。该连接器的详细参考信息在ActiveMQ的网站上([url]http://mng.bz/716b[/url])。
关于VM传输协议选项中重要的是你能利用它们在一些程度上配置代理。那些以broker.为前缀的配置被用来调节代理。例如,接下来的URI设置了代理为不支持消息持久性(消息持久在第5章中论述):
vm://broker1?marshal=false&broker.persistent=false
也有一个替代它的URI语法能用来配置嵌入式代理:
vm:broker:([b]transportURI,network:networkURI[/b])/brokerName?key=value
(图略)
完成的代理URI的说明信息在ActiveMQ的网站上([url]http://mng.bz/FNos[/url]).
正如你所看到的,这种URI能被用来配置额外的传输连接器。看一下下面的URI,例如:
vm:broker:(tcp://localhost:6000)?brokerName=embeddedbroker&persistent=false
这里,我们定义了一个叫做embeddedBroker的嵌入式代理并配置了一个TCP连接器监听端口6000上的连接。最后,也被设置了不支持持久化。该描述示范了在应用程序内部连接到代理的客户端会使用VM传输,然而外部应用的连接会使用TCP连接器连接嵌入式代理,如同他们在任何独立代理的情况下做的那样。
要使用一个额外的配置文件的嵌入式代理能通过brokerConfig这个传输配置和在URI中配置activemq.xml文件。这里有个例子:
vm://localhost?[b]brokerConfig=xbean:activemq.xml[/b]
这个例子会在classpath中使用xbean:协议定位activemq.xml文件。通过这种方法,一个嵌入式代理能像独立代理一样使用xml配置文件进行配置。
现在股票publisher能使用下面的命令在一个嵌入式代理中启动了:
$ mvn exec:java -Dexec.mainClass=org.apache.activemq.book.ch4.Publisher \
-Dexec.args="vm://localhost CSCO ORCL"
[i]...
Sending: {price=65.713356601409, stock=JAVA, offer=65.779069958011, up=true}
on destination: topic://STOCKS.JAVA
Java application
Broker
vm://
Java appl ications
tcp://
Other applications
exchange messages
with broker using
tcp transport
Figure 4.4 Application
exchanges mess with
embedded broker using vm
transport
Network connectors 81
Sending: {price=66.071605671946, stock=JAVA, offer=66.137677277617, up=true}
on destination: topic://STOCKS.JAVA
Sending: {price=65.929035001620, stock=JAVA, offer=65.994964036622, up=false}
on destination: topic://STOCKS.JAVA
...[/i]
注意publisher在没有启动外部代理的情况下工作正常。
VM阐述的一个现在的优点是客户端到代理器的交互提高了性能。同时,你将只有一个java应用运行(一个JVM)而不是两个,这将减轻你的部署过程。这也意味着管理更上的java进程。所以,如果你计划使用的代理主要在一个应用里,可能你应该考虑使用嵌入式代理。嵌入式ActiveMQ会在第8章详细介绍。
在另一方面,如果太多的使用嵌入式代理的java应用存在,当尝试去一致地配置每个代理并备份数据会产生维护问题。在这种情况下,创建一个小型独立代理群比使用嵌入式代理更容易。
一个ActiveMQ代理服务你所有的应用需求适用于大多数的情况。但是一个环境需要更高级特性,比如高可用性和更大的伸缩性。这个可通过代理网来实现。在接下来的章节你会了解到代理网和配置那些网络的网络连接器。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值