资源管理配置
Artemis拥有自己的资源管理器,用于处理JTA事务的生命周期。启动事务时,将通知资源管理器并保留事务及其当前状态的记录。在某些情况下,可能出现启动事务但后来被遗忘了。也许客户端异常,再也没有重连。如果发生这种情况,那么事务将无限期的等待。
Artemis为了处理这类问题,通过配置可以扫描并回滚它找到的任何旧事务。默认值为3000000毫秒(5分钟),即删除任何超过5分钟的事务。可以通过编辑broker.xml中的transaction-timeout属性来更改此超时(值必须以毫秒为单位)。属性transaction-timeout-scan-period配置扫描旧事务的频率(以毫秒为单位)。
请注意,Apache ActiveMQ Artemis不会单方面回滚任何处于准备状态的XA事务 - 如果确定它们永远不会被事务管理器处理,则必须尝试通过管理API进行回滚。
定时消息
定时消息于普通消息不同,其将会在未来指定时间进行投递。
在JMS或CORE API的消息中设定名称为“_AMQ_SCHED_DELIVERY”(或常量Message.HDR_SCHEDULED_DELIVERY_TIME)的消息来实现定时消息,其属性值为long类型,对应必须开始投递消息的时间(单位ms)。
使用JMS发送定时消息例子如下:
TextMessage message = session.createTextMessage("This is a scheduled message message which will be delivered in 5 sec.");
message.setLongProperty("_AMQ_SCHED_DELIVERY", System.currentTimeMillis() + 5000);
producer.send(message);
...
// message will not be received immediately but 5 seconds later
TextMessage messageReceived = (TextMessage) consumer.receive();
注:此系列文章为Apache Artemis V2.6.2官方使用文档的简要翻译文档(非完全按照官方文档排版进行翻译,有删减),个人能力有限如有错误请谅解。源文档地址:http://activemq.apache.org/artemis/docs/latest/index.html