日期:2014-05-16  浏览次数:20437 次

5.2KahaDB消息仓库

从ActiveMQ版本5.3起,对于一般用途的消息,建议使用KahaDB作为消息仓库。这是一个基于文件的消息仓库,它结合了事务性日报,提高了可靠的消息存储和恢复,具有良好的性能和可扩展性。 KahaDB是被调整和设计为快速的消息存储的基于文件的事务性仓库。KahaDB仓库的目标是易用和尽量快。它的基于文件消息数据库的使用意味着没有第三方数据库的先决条件。这个消息仓库使ActiveMQ能被很快下载和运行。除此之外,KahaDB仓库的结构已为消息代理的需要特意改进了。 KahaDB消息仓库为它的索引使用事务性日志并为它的所有目标使用一个索引文件。它已被用到有10000个活跃连接的产品环境,每个连接有个单独的队列。KahaDB仓库的可配置性意味着它能被调整为大多数的使用场景,从高生产能力的应用(例如交易平台),到存储大量的消息(例如,GPS追踪)。 为了为ActiveMQ启用KahaDB仓库,你需要在activemq.xml中配置元素。这里有一个KahaDB消息仓库的最小限度配置:

<broker brokerName="broker" persistent="true" useShutdownHook="false">

...

<persistenceAdapter>

<kahaDB directory="activemq-data" journalMaxFileLength="16mb"/>

</persistenceAdapter>

...

</broker>

?如果你想要在一个应用中嵌入ActiveMQ代理,消息仓库也可编程配置。这里有一个KahaDB的编程配置:

?

public class EmbeddedBrokerUsingAMQStoreExample {
	BrokerService createEmbeddedBroker() throws Exception {
		BrokerService broker = new BrokerService();
		File dataFileDir = new File("target/amq-in-action/kahadb");
		KahaDBStore kaha = new KahaDBStore();
		kaha.setDirectory(dataFileDir);
		// Using a bigger journal file
		kaha.setJournalMaxFileLength(1024 * 100);
		// small batch means more frequent and smaller writes
		kaha.setIndexWriteBatchSize(100);
		// do the index write in a separate thread
		kaha.setEnableIndexWriteAsync(true);
		broker.setPersistenceAdapter(kaha);
		// create a transport connector
		broker.addConnector("tcp://localhost:61616");
		// start the broker
		broker.start();
		return broker;
	}
}
?

?

虽然这个例子看起来很小,但它足够使用KahaDB消息仓库创建ActiveMQ代理并在TCP上监听ActiveMQ客户端连接。更多关于嵌入式ActiveMQ的信息,请看第8章。 为了更好地理解和配置,调查KahaDB消息仓库的内部构件是重要的。