3

使用activemq broker主从时是否也共享调度消息?我通过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 来找出哪个代理在空中。这一切都很好。

但是,计划消息不会出现在数据库中,并且计划消息只会在具有计划消息的代理关闭时停止出现。

谢谢!

4

1 回答 1

2

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

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

并来自http://activemq.apache.org/masterslave.html

JDBC 主从 - 需要一个共享数据库。也比较慢,因为它不能使用高性能期刊

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

调度程序存储将使用基于 KahaDB 的存储,而不管您为消息存储使用的持久性适配器。

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

于 2014-04-07T19:05:54.573 回答