logo资料库

activemq中文参考手册.doc

第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
资料共26页,剩余部分请下载后查看
绝对超值1 JMS
1.1 JMS的基本构件
1.1.1 连接工厂
1.1.2 连接
1.1.3 会话
1.1.4 目的地
1.1.5 消息生产者
1.1.6 消息消费者
1.1.7 消息
1.2 JMS的可靠性机制
1.2.1 确认 JMS消息
1.2.2 持久性
1.2.3 优先级
1.2.4 消息过期
1.2.5 临时目的地
1.2.6 持久订阅
1.2.7 本地事务
1.3 JMS 规范的变迁
2.ActiveMQ
2.1 Broker
2.1.1 运行Broker
2.1.2 嵌入式Broker
2.1.3 监控Broker
2.1.3.1 JMX
2.1.3.2 Web Console
2.1.3.3 Advisory Message
2.1.3.4 Command Agent
2.1.3.5 Visualization Plugin
2.2 Transport
2.2.1 VM Transport
2.2.2 TCP Transport
2.2.3 Failover Transport
2.2.4 Discovery transport
2.3 持久化
2.3.1 AMQ Message Store
2.3.2 Kaha Persistence
2.3.3 JDBC Persistence
2.3.4 Disable Persistence
2.4 安全机制
2.4.1 Simple Authentication Plugin
2.4.2 JAAS Authentication Plugin
2.4.3 Custom Authentication Implementation
2.4.4 Authorization Plugin
2.5 Clustering
2.5.1 Queue consumer clusters
2.5.2 Broker clusters
2.5.3 Master Slave
2.5.3.1 Pure Master Slave的工作方式• Slave broker消费mas
2.5.3.2 Shared File System Master Slave
2.5.3.3 JDBC Master Slave
2.6 Features
2.6.1 Exclusive Consumer
2.6.2 Message Groups
2.6.3 JMS Selectors
2.6.4 Pending Message Limit Strategy
2.6.5 Composite Destinations
2.6.6 Mirrored Queues
2.6.7 Wildcards
2.6.8 Async Sends
2.6.9 Dispatch Policies
2.6.9.1 Round Robin Dispatch Policy
2.6.9.2 Strict Order Dispatch Policy
2.6.10 Message Cursors
2.6.11 Optimized Acknowledgement
2.6.12 Producer Flow Control
2.6.13 Message Transformation
绝对超值1JMS 在介绍 ActiveMQ 之前,首先简要介绍一下 JMS 规范。 1.1JMS的基本构件 1.1.1 连接工厂 连接工厂是客户用来创建连接的对象,例如 ActiveMQ 提供的 ActiveMQConnectionFactory。 1.1.2 连接 JMS Connection 封装了客户与 JMS 提供者之间的一个虚拟的连接。 1.1.3 会话 JMS Session 是生产和消费消息的一个单线程上下文。会话用于创建消息生产者(producer)、消息消费者(consumer)和消息 (message)等。会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。 1.1.4 目的地 目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。JMS1.0.2 规范中定义了两种消息传递域:点对点(PTP) 消息传递域和发布/订阅消息传递域。 点对点消息传递域的特点如下: • 每个消息只能有一个消费者。 • 消息的生产者和消费者之间没有时间上的相关性。无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。 发布/订阅消息传递域的特点如下: • 每个消息可以有多个消费者。 • 生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。JMS 规范允许客户创建持久 订阅,这在一定程度上放松了时间上的相关性要求。持久订阅允许消费者消费它在未处于激活状态时发送的消息。 在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递域中,目的地被成为主题(topic)。 1.1.5消息生产者 消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。 1.1.6 消息消费者 消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。消息的消费可以采用以下两种方法之一: • 同步消费。通过调用消费者的 receive 方法从目的地中显式提取消息。receive 方法可以一直阻塞到消息到达。 • 异步消费。客户可以为消费者注册一个消息监听器,以定义在消息到达时所采取的动作。 1.1.7 消息 JMS 消息由以下三部分组成的: • 消息头。每个消息头字段都有相应的 getter 和 setter 方法。 • 消息属性。如果需要除消息头字段以外的值,那么可以使用消息属性。 • 消息体。JMS 定义的消息类型有 TextMessage、MapMessage、BytesMessage、StreamMessage 和 ObjectMessage。 1.2JMS的可靠性机制 1.2.1 确认 JMS消息
只有在被确认之后,才认为已经被成功地消费了。消息的成功消费通常包含三个阶段:客户接收消息、客户处理消息和消息被确认。 在事务性会话中,当一个事务被提交的时候,确认自动发生。在非事务性会话中,消息何时被确认取决于创建会话时的应答模式 (acknowledgement mode)。该参数有以下三个可选值: • Session.AUTO_ACKNOWLEDGE。当客户成功的从 receive 方法返回的时候,或者从 MessageListener.onMessage 方法成功返 回的时候,会话自动确认客户收到的消息。 • Session.CLIENT_ACKNOWLEDGE。客户通过消息的 acknowledge 方法确认消息。需要注意的是,在这种模式中,确认是在会 话层上进行:确认一个被消费的消息将自动确认所有已被会话消费的消息。例如,如果一个消息消费者消费了 10 个消息,然后确 认第 5 个消息,那么所有 10 个消息都被确认。 • Session.DUPS_ACKNOWLEDGE。该选择只是会话迟钝的确认消息的提交。如果 JMS Provider 失败,那么可能会导致一些重复 的消息。如果是重复的消息,那么 JMS Provider 必须把消息头的 JMSRedelivered 字段设置为 true。 1.2.2 持久性 JMS 支持以下两种消息提交模式: • PERSISTENT。指示 JMS Provider 持久保存消息,以保证消息不会因为 JMS Provider 的失败而丢失。 • NON_PERSISTENT。不要求 JMS Provider 持久保存消息。 1.2.3 优先级 可以使用消息优先级来指示 JMS Provider 首先提交紧急的消息。优先级分 10 个级别,从 0(最低)到 9(最高)。如果不指定优 先级,默认级别是 4。需要注意的是,JMS Provider 并不一定保证按照优先级的顺序提交消息。 1.2.4 消息过期 可以设置消息在一定时间后过期,默认是永不过期。 1.2.5 临时目的地 可以通过会话上的 createTemporaryQueue 方法和 createTemporaryTopic 方法来创建临时目的地。它们的存在时间只限于创建它 们的连接所保持的时间。只有创建该临时目的地的连接上的消息消费者才能够从临时目的地中提取消息。 1.2.6 持久订阅 首先消息生产者必须使用 PERSISTENT 提交消息。客户可以通过会话上的 createDurableSubscriber 方法来创建一个持久订阅, 该方法的第一个参数必须是一个 topic,第二个参数是订阅的名称。 JMS Provider 会存储发布到持久订阅对应的 topic 上的消息。 如果最初创建持久订阅的客户或者任何其它客户使用相同的连接工厂和连接的客户 ID、相同的主题和相同的订阅名再次调用会话 上的 createDurableSubscriber 方法,那么该持久订阅就会被激活。JMS Provider 会象客户发送客户处于非激活状态时所发布的消 息。 持久订阅在某个时刻只能有一个激活的订阅者。持久订阅在创建之后会一直保留,直到应用程序调用会话上的 unsubscribe 方法。 1.2.7 本地事务 在一个 JMS 客户端,可以使用本地事务来组合消息的发送和接收。JMS Session 接口提供了 commit 和 rollback 方法。事务提交 意味着生产的所有消息被发送,消费的所有消息被确认;事务回滚意味着生产的所有消息被销毁,消费的所有消息被恢复并重新提 交,除非它们已经过期。 事务性的会话总是牵涉到事务处理中,commit 或 rollback 方法一旦被调用,一个事务就结束了,而另一 个事务被开始。关闭事务性会话将回滚其中的事务。 需要注意的是,如果使用请求/回复机制,即发送一个消息,同时希望在同一 个事务中等待接收该消息的回复,那么程序将被挂起,因为知道事务提交,发送操作才会真正执行。 需要注意的还有一个,消息 的生产和消费不能包含在同一个事务中。 1.3JMS 规范的变迁 JMS 的最新版本的是 1.1。它和同 1.0.2 版本之间最大的差别是,JMS1.1 通过统一的消息传递域简化了消息传递。这不仅简化了 JMS API,也有利于开发人员灵活选择消息传递域,同时也有助于程序的重用和维护。 以下是不同消息传递域的相应接口: JMS 公共 ConnectionFactory Connection Destination Session 点对点域 QueueConnectionFactory QueueConnection Queue QueueSession 发布/订阅域 TopicConnectionFactory TopicConnection Topic TopicSession
MessageProducer MessageConsumer QueueSender QueueReceiver TopicPublisher TopicSubscriber 2.ActiveMQ 2.1Broker 2.1.1 运行Broker ActiveMQ 5.0 的二进制发布包中 bin 目录中包含一个名为 activemq 的脚本,直接运行这个脚本就可以启动一个 broker。 此外也 可以通过 Broker Configuration URI 或 Broker XBean URI 对 broker 进行配置,以下是一些命令行参数的例子: Example activemq activemq xbean:myconfig.xml activemq xbean:file:./conf/broker1.xml activemq xbean:file:C:/ActiveMQ/conf/broker2.xml broker:(tcp://localhost:61616, activemq tcp://localhost:5000)?useJmx=true activemq network:tcp://localhost:5000)?persistent=false broker:(tcp://localhost:61616, Description Runs a broker using the default 'xbean:activemq.xml' as the broker configuration file. Runs a broker using the file myconfig.xml as the broker configuration file that is located in the classpath. Runs a broker using the file broker1.xml as the broker configuration file that located in the relative file path ./conf/broker1.xml Runs a broker using the file broker2.xml as the broker configuration file that is located in the absolute file path C:/ActiveMQ/conf/broker2.xml Runs a broker with two transport connectors and JMX enabled. is Runs a broker with 1 transport connector and 1 network connector with persistence disabled. 2.1.2 嵌入式Broker 可以通过在应用程序中以编码的方式启动 broker,例如: Java 代码 1. BrokerService broker = new BrokerService(); 2. broker.addConnector("tcp://localhost:61616"); 3. broker.start(); 如果需要启动多个 broker,那么需要为 broker 设置一个名字。例如: Java 代码 1. BrokerService broker = new BrokerService(); 2. broker.setName("fred"); 3. broker.addConnector("tcp://localhost:61616"); 4. broker.start(); 如果希望在同一个 JVM 内访问这个 broker,那么可以使用 VM Transport,URI 是:vm://brokerName。关于更多的 broker 属性, 可以参考 Apache 的官方文档。 此外,也可以通过 BrokerFactory 来创建 broker,例如: Java 代码 1. BrokerService broker = BrokerFactory.createBroker(new URI(someURI)); someURI 的可选值如下: URI scheme xbean: Example xbean:activemq.xml Description Searches the classpath for an XML document with the given URI (activemq.xml in this case) which will then be used as the Xml Configuration Loads the given file (in this example foo/bar/activemq.xml) file: file:foo/bar/activemq.xml
broker: broker:tcp://localhost:61616 as the Xml Configuration Uses the Broker Configuration URI to configure the broker 当使用 XBean 的配置方式的时候,需要指定一个 xml 配置文件,例如: Java 代码 1. BrokerService broker = BrokerFactory.createBroker(new URI("xbean:com/test/activemq.xml")); 使用 Spring 的配置方式如下: Xml 代码 1. 2. 3. 4. 2.1.3 监控Broker 2.1.3.1JMX 在使用 JMX 监控 broker 之前,首先要启用 broker 的 JMX 监控功能,例如在配置文件中设置 useJmx="true",如下: Xml 代码 1. 4. 5. ... 6. 接下来运行 JDK 自带的 jconsole。在运行了 jconsole 后,它会弹出对话框来选择需要连接到的 agent。如果是在启动 broker 的主 机上运行 jconsole,那么 ActiveMQ broker 会出现在 jconsole 的 Local 标签中。如果要连接到远程的 broker,那么可以在 Advanced 标签中指定 JMX URL,以下是一个连接到本机的 JMX URL: service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi 在 jconsole 的 MBeans 标签中,可以查看详细信息,也可以执行相应的 operation。需要注意的是,在 jconsole 连接到 broker 的 时候,并不需要输入用户名和密码,如果这存在潜在的安全问题,那么就需要为 JMX Connector 配置密码保护(需要使用 1.5 以 上版本的 JDK)。 首先要禁止 ActiveMQ 创建自己的 connector,例如: Xml 代码 1. 2. 3. 4. 5. 然后在 ActiveMQ 的 conf 目录下创建一个访问控制文件和密码文件,如下: conf/jmx.access: # The "monitorRole" role has readonly access. # The "controlRole" role has readwrite access. monitorRole readonly controlRole readwrite conf/jmx.password: # The "monitorRole" role has password "abc123". # The "controlRole" role has password "abcd1234". monitorRole abc123 controlRole abcd1234 然后修改 ActiveMQ 的 bin 目录下 activemq 的启动脚本,查找包含"SUNJMX="的一行如下: REM set SUNJMX=-Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false 把它替换成 set SUNJMX=-Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=%ACTIVEMQ_BASE%/conf/jmx.password -Dcom.sun.management.jmxremote.access.file=%ACTIVEMQ_BASE%/conf/jmx.access 最后重启 ActiveMQ 和 jconsole,这时候需要强制 login。如果在启动 activemq 的过程中出现以下错误,那么需要为这个文件增加 访问控制。Windows 平台上的具体解决方法请参考如下网址: http://java.sun.com/j2se/1.5.0/docs/guide/management/security-windows.html Error: Password file read access must be restricted: D:\apache-activemq-5.0.0\bin\../conf/jmx.password 2.1.3.2WebConsole Web Console 被集成到了 ActiveMQ 的二进制发布包中,因此缺省访问 http://localhost:8161/admin 即可访问 Web Console。 在 配置文件中,可以通过修改 nioConnector 的 port 属性来修改 Web console 的缺省端口: Xml 代码 1. 2. 3. 4. 5. ... 6. 出于安全性或者可靠性的考虑,Web Console 可以被部署到不同于 ActiveMQ 的进程中。例如把 activemq-web-console.war 部署 到一个单独的 web 容器中(Tomcat,Jetty 等)。在 ActiveMQ5.0 的二进制发布包中不包含 activemq-web-console.war,因此需要 下载 ActiveMQ 的源码,然后进入到${activemq.base}/src/activemq-web-console 目录中执行 mvn instanll。如果一切正常,那么缺 省 会 在 ${activemq.base}/src/activemq-web-console/target 目 录 中 生 成 activemq-web-console-5.0.0.war 。 然 后 将 activemq-web-console-5.0.0.war 拷贝到 Tomcat 的 webapps 目录中,并重命名成 activemq-web-console.war。 需要注意的是,要将 activemq-all-5.0.0.jar 拷贝到 WEB-INF\lib 目录中(可能还需要拷贝 jms.jar)。还要为 Tomcat 设置以下五个 系统属性(修改 catalina.bat 文件): set JAVA_OPTS=%JAVA_OPTS% -Dwebconsole.type="properties" set JAVA_OPTS=%JAVA_OPTS% -Dwebconsole.jms.url="tcp://localhost:61616" set JAVA_OPTS=%JAVA_OPTS% -Dwebconsole.jmx.url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi" set JAVA_OPTS=%JAVA_OPTS% -Dwebconsole.jmx.role="" set JAVA_OPTS=%JAVA_OPTS% -Dwebconsole.jmx.password="" 如果 JMX 没有配置密码保护,那么 webconsole.jmx.role 和 webconsole.jmx.password 设置成""即可。如果 broker 被配置成了 Master/Slave 模式,那么可以配置成使用 failover transport,例如: -Dwebconsole.jms.url=failover:(tcp://serverA:61616,tcp://serverB:61616) 顺 便 说 一 下 , 由 于 webconsole.type 属 性 是 properties , 因 此 实 际 上 起 作 用 的 Web Console 的 配 置 文 件 是 WEB-INF/ webconsole-properties.xml。最后启动被监控的 ActiveMQ,访问 http://localhost:8080/activemq-web-console/,查看显示是否正 常。 2.1.3.3AdvisoryMessage ActiveMQ 支持 Advisory Messages,它允许你通过标准的 JMS 消息来监控系统。目前的 Advisory Messages 支持: • consumers, producers and connections starting and stopping • temporary destinations being created and destroyed • messages expiring on topics and queues • brokers sending messages to destinations with no consumers. • connections starting and stopping Advisory Messages 可以被想象成某种的管理通道,通过它你可以得到关于 JMS Provider、producers、consumers 和 destinations
的信息。Advisory topics 都使用 ActiveMQ.Advisory.这个前缀,以下是目前支持的 topics: Client based advisories Advisory Topics ActiveMQ.Advisory.Connection ActiveMQ.Advisory.Producer.Queue ActiveMQ.Advisory.Producer.Topic ActiveMQ.Advisory.Consumer.Queue ActiveMQ.Advisory.Consumer.Topic Description Connection start & stop messages Producer start & stop messages on a Queue Producer start & stop messages on a Topic Consumer start & stop messages on a Queue Consumer start & stop messages on a Topic 在消费者启动/停止的 Advisory Messages 的消息头中有个 consumerCount 属性,他用来指明目前 desination 上活跃的 consumer 的数量。 Destination and Message based advisories Advisory Topics ActiveMQ.Advisory.Queue ActiveMQ.Advisory.Topic ActiveMQ.Advisory.TempQueue ActiveMQ.Advisory.TempTopic ActiveMQ.Advisory.Expired.Queue ActiveMQ.Advisory.Expired.Topic ActiveMQ.Advisory.NoConsumer.Queue ActiveMQ.Advisory.NoConsumer.Topic Description Queue create & destroy Topic create & destroy Temporary Queue create & destroy Temporary Topic create & destroy Expired messages on a Queue Expired messages on a Topic No consumer is available to process messages being sent on a Queue No consumer is available to process messages being sent on a Topic 以上的这些 destnations 都可以用来作为前缀,在其后面追加其它的重要信息,例如 topic、queue、clientID、producderID 和 consumerID 等。这令你可以利用 Wildcards 和 Selectors 来过滤 Advisory Messages(关于 Wildcard 和 Selector 会在稍后介绍)。 例 如 , 如 果 你 希 望 订 阅 FOO.BAR 这 个 queue 上 Consumer 的 start/stop 的 消 息 , 那 么 可 以 订 阅 ActiveMQ.Advisory.Consumer.Queue.FOO.BAR ; 如 果 希 望 订 阅 所 有 queue 上 的 start/stop 消 息 , 那 么 可 以 订 阅 ActiveMQ.Advisory.Consumer.Queue.> ; 如 果 希 望 订 阅 所 有 queue 或 者 topic 上 的 start/stop 消 息 , 那 么 可 以 订 阅 ActiveMQ.Advisory.Consumer. >。 org.apache.activemq.advisory.AdvisorySupport 类上有如下的 helper methods,用来在程序中得到 advisory destination objects。 Java 代码 1. AdvisorySupport.getConsumerAdvisoryTopic() 2. AdvisorySupport.getProducerAdvisoryTopic() 3. AdvisorySupport.getDestinationAdvisoryTopic() 4. AdvisorySupport.getExpiredTopicMessageAdvisoryTopic() 5. AdvisorySupport.getExpiredQueueMessageAdvisoryTopic() 6. AdvisorySupport.getNoTopicConsumersAdvisoryTopic() 7. AdvisorySupport.getNoQueueConsumersAdvisoryTopic() 以下是段使用 Advisory Messages 的程序代码: Java 代码 1. Destination advisoryDestination = AdvisorySupport.getProducerAdvisoryTopic(destination) 2. MessageConsumer consumer = session.createConsumer(advisoryDestination); 3. consumer.setMessageListener(this); 4. ... 5. public void onMessage(Message msg){ 6. if (msg instanceof ActiveMQMessage){ 7. try { 8. ActiveMQMessage aMsg = (ActiveMQMessage)msg; 9. ProducerInfo prod = (ProducerInfo) aMsg.getDataStructure(); 10. } catch (JMSException e) { 11. log.error("Failed to process message: " + msg); 12. }
13. } 14.} 2.1.3.4CommandAgent 在介绍 Command Agent 前首先简要介绍一下 XMPP(Jabber)协议,XMPP 是一种基于 XML 的即时通信协议,它由 Jabber 软件基 金会开发。在配置文件中通过增加 transportConnector 来支持 XMPP 协议: Xml 代码 1. 2. 3. ... 4. 5. 6. ActiveMQ 提供了 ActiveMQ messages 和 XMPP 之间的双向桥接: • 如果客户加入了一个聊天室,那么这个聊天室的名字会被映射到一个 JMS topic。 • 尝试在聊天室内发送消息会导致一个 JMS 消息被发送到这个 topic。 • 呆在一个聊天室中意味着这将保持一个对相应 JMS topic 的订阅。因此发送到这个 topic 的 JMS 消息也会被发送到聊天室。 推荐 XMPP 客户端 Spark(http://www.igniterealtime.org/)。 从 4.2 版本起,ActiveMQ 支持 Command Agent。在配置文件中,通过设置 commandAgent 来启用 Command Agent: Xml 代码 1. 2. 3. ... 4. 5. 6. 启用了 Command Agent 的 broker 上会有一个来自 Command Agent 的连接,它同时订阅 topic:ActiveMQ.Agent。在你启动 XMPP 客户端,加入到 ActiveMQ.Agent 聊天室后,就可以同 broker 进行交谈了。通过在 XMPP 客户端中键入 help,可以得到帮助信息。 需要注意的是,ActiveMQ5.0 版本有个小 bug,如果 broker 没有采用缺省的用户名和密码,那么 Command Agent 便无法正常启 动。Apache 官方文档说,此 bug 已经被修正,预定在 5.2.0 版本上体现。修改方式如下: Xml 代码 1. 2.1.3.5VisualizationPlugin ActiveMQ 支持以 broker 插件的形式生成 DOT 文件(可以用 agrviewer 来查看),以图表的方式描述 connections、sessions、 producers、consumers、destinations 等信息。配置方式如下: Xml 代码 1. 2. ... 3. 4. 5. 6. 7. 需 要 注 意 的 是 , 笔 者 认 为 ActiveMQ5.0 版 本 的 Visualization Plugin 尚 不 稳 定 , 存 在 诸 多 问 题 。 例 如 : 如 果 使 用 connectionDotFilePlugin,那么 brokerName 必须是 localhost;如果使用 destinationDotFilePlugin 可能会导致 ArrayStoreException。 2.2Transport ActiveMQ 目前支持的 transport 有:VM Transport、TCP Transport、SSL Transport、Peer Transport、UDP Transport、Multicast
Transport、HTTP and HTTPS Transport、Failover Transport、Fanout Transport、Discovery Transport、ZeroConf Transport 等。 以下简单介绍其中的几种,更多请参考 Apache 官方文档。 2.2.1VMTransport VM transport 允许在 VM 内部通信,从而避免了网络传输的开销。这时候采用的连接不是 socket 连接,而是直接地方法调用。 第 一个创建 VM 连接的客户会启动一个 embed VM broker,接下来所有使用相同的 broker 名称的 VM 连接都会使用这个 broker。当 这个 broker 上所有的连接都关闭的时候,这个 broker 也会自动关闭。 以下是配置语法: vm://brokerName?transportOptions 例如:vm://broker1?marshal=false&broker.persistent=false Transport Options 的可选值如下: Option Name Marshal Default Value Description false wireFormat wireFormat.* create default true broker.* If true, forces each command sent over the transport to be marshlled and unmarshlled using a WireFormat The name of the WireFormat to use All the properties with this prefix are used to configure the wireFormat If the broker should be created on demand if it does not allready exist. Only supported in ActiveMQ 4.1 All the properties with this prefix are used to configure the broker. See Configuring Wire Formats for more information 以下是高级配置语法: vm:(broker:(tcp://localhost)?brokerOptions)?transportOptions vm:broker:(tcp://localhost)?brokerOptions 例如:vm:(broker:(tcp://localhost:6000)?persistent=false)?marshal=false Transport Options 的可选值如下: Option Name marshal Default Value false wireFormat wireFormat.* default Description If true, forces each command sent over the transport to be marshlled and unmarshlled using a WireFormat The name of the WireFormat to use All the propertieswith this prefix are used to configure the wireFormat 使用配置文件的配置语法: vm://localhost?brokerConfig=xbean:activemq.xml 例如:vm:// localhost?brokerConfig=xbean:com/test/activemq.xml 使用 Spring 的配置: Xml 代码 1. 2. 3. 4. 5. 6. 7. 8. 如果 persistent 是 true,那么 ActiveMQ 会在当前目录下创建一个缺省值是 activemq-data 的目录用于持久化保存数据。需要注意 的是,如果程序中启动了多个不同名字的 VM broker,那么可能会有如下警告:Failed to start jmx connector: Cannot bind to URL [rmi://localhost:1099/jmxrmi]: javax.naming.NameAlreadyBoundException… 可 以 通 过 在 transportOptions 中 追 加 broker.useJmx=false 来禁用 JMX 来避免这个警告。
分享到:
收藏