Xml 參考
ActiveMQ Classic Xml 參考
此頁面包含 ActiveMQ Classic 版本中 Xml 配置的 XML 參考指南和 XML 結構描述文件的連結
發布的結構描述
在組態檔中使用 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.dev.org.tw/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.dev.org.tw/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.dev.org.tw/schema/core。
ActiveMQ Classic 5.2 範例**
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="https://activemq.dev.org.tw/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.dev.org.tw/schema/core
https://activemq.dev.org.tw/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.dev.org.tw/schema/core/activemq-core-5.0.0.xsd
">
</beans>
以上兩個範例幾乎相同。 只有一個差異是 xml 命名空間。 您可以在 activemq-dev 主題:ActiveMQ Classic 命名空間變更上找到有關命名空間變更的更多資訊。
結構描述驗證
注意: 在 5.6 中移除了 xml 配置的順序約束,即 broker 元素
依字母順序排列的 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.dev.org.tw/schema/core https://activemq.dev.org.tw/schema/core/activemq-core.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<broker xmlns="https://activemq.dev.org.tw/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.dev.org.tw/schema/core":producerSystemUsage, "https://activemq.dev.org.tw/schema/core":proxyConnectors, "https://activemq.dev.org.tw/schema/core":regionBroker, "https://activemq.dev.org.tw/schema/core":services, "https://activemq.dev.org.tw/schema/core":shutdownHooks, "https://activemq.dev.org.tw/schema/core":sslContext, "https://activemq.dev.org.tw/schema/core":systemUsage, "https://activemq.dev.org.tw/schema/core":taskRunnerFactory, "https://activemq.dev.org.tw/schema/core":tempDataStore, "https://activemq.dev.org.tw/schema/core":transportConnectorURIs, "https://activemq.dev.org.tw/schema/core":transportConnectors, WC["https://activemq.dev.org.tw/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.dev.org.tw/schema/core https://activemq.dev.org.tw/schema/core/activemq-core.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<broker xmlns="https://activemq.dev.org.tw/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
...