Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
主从模式中的ActiveMQ调度消息_Activemq_Master Slave_Broker - Fatal编程技术网

主从模式中的ActiveMQ调度消息

主从模式中的ActiveMQ调度消息,activemq,master-slave,broker,Activemq,Master Slave,Broker,使用activemq代理主从时是否也共享计划消息?我通过jdbc成功地创建了主从,但是调度的消息没有出现在数据库中。这使得主从代理配置并非真正的100%故障切换系统。或者有什么我应该特别设置的来实现这一点吗 我通常使用此代码创建代理: BrokerService brokerService = new BrokerService(); brokerService.setBrokerName(brokerName); brokerService.addConnector("tcp://" + ho

使用activemq代理主从时是否也共享计划消息?我通过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"));
然后启动brokerService:

brokerService.start();
这段代码运行良好。在代理之间成功地共享队列,并且消费者完成他们的工作。使用者有时会创建一个生产者,该生产者成功地使用故障转移URL来找出哪个代理在空中。这一切都很好

但是,计划消息不会出现在数据库中,并且当包含计划消息的代理关闭时,计划消息将停止出现


谢谢

以下引用自:

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

和来自:

JDBC主从-需要共享数据库。也相对较慢,因为它无法使用 高性能期刊

下面是答案():

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


看来,只有使用基于KahaDB的存储才能实现调度消息的高(和正确的?)性能。要解决此问题,您可能可以使用共享文件系统来存储KahaDB数据库(请参阅)。如果没有,您应该找到一种方法,让代理在升级为主代理时安排消息。

好,那么您的意思是:“不,在使用数据库时不会共享已安排的消息。尝试KahaDB数据库,这可能会起作用,但没有保证”。是吗?是的,这可能有效,我在文档中找不到关于这一点的明确说明。
brokerService.start();