【问题标题】:ActiveMQ scheduled messages in master-slaveActiveMQ主从调度消息
【发布时间】:2014-04-20 08:36:24
【问题描述】:

使用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 来找出哪个代理在空中。一切都很好。

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

谢谢!

【问题讨论】:

    标签: activemq master-slave broker


    【解决方案1】:

    鉴于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)。如果没有,您应该找到一种方法让代理在提升为主节点时安排消息。

    【讨论】:

    • 好的,所以你是说:“不,使用数据库时不共享预定消息。试试 KahaDB 数据库,这可能有效,但没有保证”。对吗?
    • 是的,它可能有效,我无法在文档中找到明确的说明。
    猜你喜欢
    • 2021-12-26
    • 2013-11-24
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2018-04-21
    • 2020-01-17
    • 2013-09-30
    • 2012-01-03
    相关资源
    最近更新 更多