有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数。。。
类似这种需求,ActiveMQ提供了一种broker端消息定时调度机制。
我们只需要把几个描述消息定时调度方式的参数作为属性添加到消息,broker端的调度器就会按照我们想要的行为去处理消息。
一共有四个属性:
AMQ_SCHEDULED_DELAY | long | 延迟投递的时间 |
AMQ_SCHEDULED_PERIOD | long | 重复投递的时间间隔 |
AMQ_SCHEDULED_REPEAT | int | 重复投递次数 |
AMQ_SCHEDULED_CRON | String | Cron表达式 |
当然ActiveMQ也提供了一个封装的消息类型:org.apache.activemq.ScheduledMessage.
使用示例,延迟60秒:
MessageProducer producer = session.createProducer(destination); TextMessage message = session.createTextMessage("test msg"); long time = 60 * 1000; message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, time); producer.send(message);
延迟30秒,投递10次,间隔10秒:
MessageProducer producer = session.createProducer(destination); TextMessage message = session.createTextMessage("test msg"); long delay = 30 * 1000; long period = 10 * 1000; int repeat = 9; message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay); message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, period); message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, repeat); producer.send(message);
使用 CRON 表达式的例子:
MessageProducer producer = session.createProducer(destination); TextMessage message = session.createTextMessage("test msg"); message.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, "0 * * * *"); producer.send(message);
CRON表达式的优先级高于另外三个参数,如果在设置了CRON的同时,也有repeat和period参数,则会在每次CRON执行的时候,重复投递repeat次,每次间隔为period。就是说设置是叠加的效果。例如每小时都会发生消息被投递10次,延迟1秒开始,每次间隔1秒:
MessageProducer producer = session.createProducer(destination); TextMessage message = session.createTextMessage("test msg"); message.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, "0 * * * *"); message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 1000); message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1000); message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 9); producer.send(message);
相关推荐
消息队列:ActiveMQ:ActiveMQ消息类型:点对点与发布订阅.docx
消息队列:ActiveMQ:ActiveMQ的高级特性:虚拟目的地与代理.docx
ActiveMQ是Apache软件基金会开发的消息队列产品,它遵循开放标准,如JMS(Java Message Service)和AMQP(Advanced Message Queuing Protocol),提供跨语言的API和协议支持,可以处理各种消息传递模式,如点对点、...
在ActiveMQ消息中间件中,为了更好地实现消息的分发和管理,引入了虚拟Topic(Virtual Topic)的概念。本文将深入探讨虚拟Topic及路由功能,帮助读者理解如何利用这些特性来优化消息传递机制。 #### 一、虚拟Topic...
消息队列:ActiveMQ:ActiveMQ消息过滤与选择.docx
消息队列:ActiveMQ:ActiveMQ消息持久化机制.docx
包括:消息属性、 Advisory Message、延迟和定时消息投递、Blob消息、消息 转换等 n 十二: Consumer高级特性 包括:独有消费者、消息异步分发、消息优先级、管理持久化消息、消息分组、 消息选择器、消息重递策略、...
- [ActiveMQ官方文档 - 消息重试和DLQ处理](http://activemq.apache.org/message-redelivery-and-dlq-handling.html) #### 6. 当前方案 根据上述配置和测试步骤,当前采用的方案如下: 1. **消息设置过期**:通过...
消息队列:ActiveMQ:ActiveMQ的Web控制台使用.docx
Linux Apache ActiveMQ 5.15.3与Java Development Kit (JDK) 1.8是两个关键组件,对于在Linux环境下开发、部署和管理消息传递系统至关重要。ActiveMQ是Apache软件基金会的一个开源项目,它是Java消息服务(JMS)的...
ActiveMQ是Apache软件基金会开发的一款开源消息中间件,它遵循开放消息传递标准(JMS,Java Message Service),用于在分布式系统中实现可靠的消息传递。在本文中,我们将深入探讨ActiveMQ v6.0.1的核心特性、应用...
**ActiveMQ** 是一个高性能、功能丰富的开源消息中间件,它实现了 **Java Message Service (JMS)** 规范。JMS 规范定义了一组接口,这些接口提供了一个标准的方式来进行分布式系统中的消息传递。下面将详细介绍 JMS ...
### ActiveMQ与HornetQ性能对比分析 #### 概述 本文旨在通过一系列测试数据对比分析ActiveMQ与HornetQ在不同消息大小及数量下的性能表现。测试环境为相同的硬件配置,确保了测试结果的公正性。通过对比两者的发送...
在IT行业中,消息队列(Message Queue)是一种重要的中间件技术,它允许应用程序之间通过异步通信进行数据交换。在本教程中,我们将探讨如何整合Spring框架与ActiveMQ消息队列,实现前后台的消息传递。这有助于提升...
ActiveMQ 队列消息过期时间设置和自动清除解决方案 ActiveMQ 是一个开源的消息队列系统,用于实现分布式系统之间的异步通信。在使用 ActiveMQ 时,消息过期时间设置和自动清除是一个非常重要的问题。本文将介绍 ...
在IT行业中,消息队列(Message Queue)是一种重要的中间件技术,它允许应用程序之间通过异步通信进行数据交换。在本教程中,我们将专注于如何在SpringBoot框架下快速集成并使用ActiveMQ,一个广泛使用的开源消息...
本示例主要探讨如何将Spring Boot与ActiveMQ结合,实现MQ延迟功能,这对于一些需要定时触发的任务,如订单超时处理、定时发送邮件等场景非常有用。 首先,我们需要理解Spring Boot和ActiveMQ的基本概念。Spring ...
消息队列:ActiveMQ:ActiveMQ简介与安装.docx
消息队列:ActiveMQ:ActiveMQ的Spring集成.docx
消息队列:ActiveMQ:ActiveMQ的事务处理.docx