XML 参考
ActiveMQ Classic XML 参考
此页面包含指向 XML 参考指南和 XML 模式文档的链接,用于 XML 配置 与 ActiveMQ Classic 版本一起使用
已发布的模式
在配置文件中使用 XSD
如果您使用 XBean 解析 XML 配置,则 XML 验证是可选的,因此您不需要指定 XML 模式位置。但是,如果您使用 Spring 的 2.0 XML 处理来解析 XML,那么您需要在 XML 文档中引用 XSD 位置,因为 Spring 使用模式命名空间或模式位置来解析命名空间处理程序。没有正确的命名空间定义,您将收到如下消息
Unable to locate NamespaceHandler for namespace [http://activemq.org/config/1.0]
您可以在 XML 中引用 XSD 的特定版本,如下所示
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.org/config/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.org/config/1.0 https://activemq.apache.org/schema/core/activemq-core-4.1.2.xsd">
或者,如果您愿意,您可以使用没有版本号的通用 XSD
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.org/config/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://activemq.org/config/1.0 https://activemq.apache.org/schema/activemq-core.xsd">
您的 IDE 将无法获取此 XSD,您必须手动关联特定版本;但是,这意味着您不必在每次 ActiveMQ Classic 版本发布时都升级 XML 配置文件;因为它将使用 activemq-core.jar 中捆绑的 XSD 来解析此 XSD。
注意命名空间
如果您使用的是 ActiveMQ Classic 5.0 或更早版本,则 XML 命名空间定义应指向 http://activemq.org/config/1.0。如果您使用的是 ActiveMQ Classic 5.1 或更高版本,则命名空间应指向 https://activemq.apache.org/schema/core。
`ActiveMQ Classic 5.2 示例**
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="https://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
https://activemq.apache.org/schema/core
https://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd
">
</beans>
`ActiveMQ Classic 5.0 示例**
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.org/config/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://activemq.org/config/1.0
https://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd
">
</beans>
以上两个示例几乎相同。唯一的区别是 xml 命名空间。您可以在 activemq-dev 主题:ActiveMQ Classic 命名空间更改 中找到有关命名空间更改的更多信息。
模式验证
注意: xml 配置排序约束已在 5.6 中删除,代理元素
按字母顺序排列的 XML 元素(5.4 - 5.5.1)
XMLSchema:sequence 被替换为 XMLSchema:all
注意:从 5.4.2 版本开始,您可以在命令行中附加一个查询参数到 xbean url 来禁用验证。如果需要,这将允许您按原样重用现有的 xml 配置。
bin/activemq console xbean:conf/activemq.xml?validate=false
从 ActiveMQ Classic 5.4 开始,<broker>
元素中的 XML 元素必须按字母顺序排列。如果您查看 XSD,ActiveMQ Classic 一直以来都是这样。5.4 中的区别在于,XML 配置实际上正在根据 XML 模式进行验证。
例如,以下 XML 配置在 ActiveMQ Classic 5.3.x 中没有出现问题
<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
https://activemq.apache.org/schema/core https://activemq.apache.org/schema/core/activemq-core.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<broker xmlns="https://activemq.apache.org/schema/core" brokerName="brokerB1" destroyApplicationContextOnStop="true">
<plugins>
<loggingBrokerPlugin/>
</plugins>
<persistenceAdapter>
<kahaDB directory="${activemq.base}/data/kahadb" enableJournalDiskSyncs="false" indexWriteBatchSize="10000" indexCacheSize="1000"/>
</persistenceAdapter>
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="5mb">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<managementContext>
<managementContext createConnector="false"/>
</managementContext>
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="420 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="1 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="250 mb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<transportConnectors>
<transportConnector name="tcp" uri="tcp://0.0.0.0:61616"/>
</transportConnectors>
</broker>
</beans>
但是,在 ActiveMQ Classic 5.4 中,上面的 XML 配置会导致类似于以下的异常
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'persistenceAdapter'. One of '{"https://activemq.apache.org/schema/core":producerSystemUsage, "https://activemq.apache.org/schema/core":proxyConnectors, "https://activemq.apache.org/schema/core":regionBroker, "https://activemq.apache.org/schema/core":services, "https://activemq.apache.org/schema/core":shutdownHooks, "https://activemq.apache.org/schema/core":sslContext, "https://activemq.apache.org/schema/core":systemUsage, "https://activemq.apache.org/schema/core":taskRunnerFactory, "https://activemq.apache.org/schema/core":tempDataStore, "https://activemq.apache.org/schema/core":transportConnectorURIs, "https://activemq.apache.org/schema/core":transportConnectors, WC["https://activemq.apache.org/schema/core"](#)}' is expected.
要避免 ActiveMQ Classic 5.4 中的此 XML 验证错误,只需更改 XML 元素的排序,使其按字母顺序排列。以下是相同 XML 配置的示例,但按字母顺序排列
<?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
https://activemq.apache.org/schema/core https://activemq.apache.org/schema/core/activemq-core.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<broker xmlns="https://activemq.apache.org/schema/core" brokerName="brokerB1" destroyApplicationContextOnStop="true">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" producerFlowControl="true" memoryLimit="5mb">
<deadLetterStrategy>
<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"/>
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<managementContext>
<managementContext createConnector="false"/>
</managementContext>
<persistenceAdapter>
<kahaDB directory="${activemq.base}/data/kahadb" enableJournalDiskSyncs="false" indexWriteBatchSize="10000" indexCacheSize="1000"/>
</persistenceAdapter>
<plugins>
<loggingBrokerPlugin/>
</plugins>
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="420 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="1 gb"/>
</storeUsage>
<tempUsage>
<tempUsage limit="250 mb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<transportConnectors>
<transportConnector name="tcp" uri="tcp://0.0.0.0:61616"/>
</transportConnectors>
</broker>
</beans>
可以使用 ActiveMQ Classic 启动脚本轻松地针对 ActiveMQ Classic 5.4 测试配置。以下是一个示例
$ cd $ACTIVEMQ_HOME
$ ./bin/activemq console xbean:file:/Users/bsnyder/SpringSource/clients/Finra/activemq-example-unordered.xml
INFO: Using default configuration
(you can configure options in one of these file: /etc/default/activemq /Users/bsnyder/.activemqrc)
INFO: Invoke the following command to create a configuration file
./bin/activemq setup \[ /etc/default/activemq | /Users/bsnyder/.activemqrc \]
INFO: Using java '/System/Library/Frameworks/JavaVM.framework/Home/bin/java'
INFO: Starting in foreground, this is just for debugging purposes (stop process by pressing CTRL+C)
Java Runtime: Apple Inc. 1.6.0_20 /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
Heap sizes: current=258880k free=253106k max=258880k
JVM args: -Xms256M -Xmx256M -Dorg.apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Dcom.sun.management.jmxremote -Dactivemq.classpath=/Users/bsnyder/amq/apache-activemq-5.4.1/conf; -Dactivemq.home=/Users/bsnyder/amq/apache-activemq-5.4.1 -Dactivemq.base=/Users/bsnyder/amq/apache-activemq-5.4.1
ACTIVEMQ_HOME: /Users/bsnyder/amq/apache-activemq-5.4.1
ACTIVEMQ_BASE: /Users/bsnyder/amq/apache-activemq-5.4.1
Loading message broker from: xbean:file:/Users/bsnyder/SpringSource/clients/Finra/activemq-example-unordered.xml
...