ActiveMQ在主从中调度消息

时间:2014-03-14 20:44:51

标签: activemq master-slave broker

使用activemq broker master-slave时是否也会共享预定消息?我通过jdbc成功创建了主从,但是预定的消息没有出现在数据库中。这使得主从代理配置不是真正的100%故障转移系统。或者有什么我应该具体设置来实现这一目标吗?

使用此代码,我通常会创建代理:

BrokerService brokerService = new BrokerService();
brokerService.setBrokerName(brokerName);
brokerService.addConnector("tcp://" + host + ":" + port);
brokerService.setSchedulerSupport(true);

// Allow JMX monitoring
brokerService.setUseJmx(true);
ManagementContext managementContext = new ManagementContext();
managementContext.setConnectorPort(port + 10000);
managementContext.setRmiServerPort(port + 20000);
brokerService.setManagementContext(managementContext);

// Set temp and store limits to 512MB to avoid
// unrealistic-limit-warnings
brokerService.getSystemUsage().getStoreUsage().setLimit(512 * 1024 * 1024);
brokerService.getSystemUsage().getTempUsage().setLimit(512 * 1024 * 1024);

通过这个添加,我创建了主从数据源:

Map<String, Object> configuration = entityFactory.getProperties();
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName((String) configuration.get("hibernate.connection.driver_class"));
dataSource.setUrl((String) configuration.get("hibernate.connection.url"));
dataSource.setUsername((String) configuration.get("hibernate.connection.username"));
dataSource.setPassword((String) configuration.get("hibernate.connection.password"));

我用来设置主从jbdcPersistenceAdapter:

JDBCPersistenceAdapter adapter = new JDBCPersistenceAdapter();
adapter.setDataSource(dataSource);
brokerService.setPersistenceAdapter(adapter);

然后启动brokerService:

brokerService.start();

此代码一切正常。成功地在代理之间共享队列,并且消费者完成他们的工作。消费者有时会创建一个生产者,它成功地使用故障转移URL来找出哪个经纪人在空中。这一切都运作良好。

但是,预定的消息不会出现在数据库中,并且当具有预定消息的代理关闭时,预定的消息就会停止显示。

谢谢!

1 个答案:

答案 0 :(得分:2)

鉴于http://activemq.apache.org/persistence.html的以下引用:

  

为了在ACtiveMQ V4.x中实现持久消息传递的高性能,我们   强烈建议你使用我们的高性能期刊 - 这是   默认情况下启用。

http://activemq.apache.org/masterslave.html

  

JDBC Master Slave - 需要共享数据库。因为它不能使用也相对较慢   高绩效期刊

以及以下答案(http://bit.ly/1jobMO6):

  

调度程序存储将使用基于KahaDB的存储而不管它   您正在用于消息传递存储的持久性适配器。

似乎只能通过使用基于KahaDB的商店来实现预定消息的高(并且正确?)性能。要解决此问题,您可以使用共享文件系统来存储KahaDB数据库(请参阅http://activemq.apache.org/shared-file-system-master-slave.html)。如果没有,您应该找到一种方法让经纪人在晋升为主人时安排消息。

相关问题