使用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来找出哪个经纪人在空中。这一切都运作良好。
但是,预定的消息不会出现在数据库中,并且当具有预定消息的代理关闭时,预定的消息就会停止显示。
谢谢!
答案 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)。如果没有,您应该找到一种方法让经纪人在晋升为主人时安排消息。