activeMQ在5.4以后的版本中引入了定是持久化功能。用户可以通过定义下面这些的消息属性来实现定时功能:
- AMQ_SCHEDULED_DELAY long 发送延迟
- AMQ_SCHEDULED_PERIOD long 发送间隔
- AMQ_SCHEDULED_REPEAT int 发送次数
- AMQ_SCHEDULED_CRON String 发送频率
同时,activeMQ为了方便用户的使用,提供了
org.apache.activemq.ScheduledMessage.接口来包装了这些属性,下面就来看看这些属性的具体使用。
1.延迟60s发送
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);
2.在经过30s的延迟后,每隔10s发送一次,一共发送10次
MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage("test msg");
long delay = 30 * 1000;
long period = 10 * 1000;
int repeat = 10;
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, period);
message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, repeat);
producer.send(message);
3.定义每小时发送一次,可以利用CRON值来设定:
MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage("test msg");
message.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, "0 * * * *");
producer.send(message);
这里对CRON简单介绍下:
| Entry | | Description | | Equivalent To |
| @yearly | | Run once a year | | 0 0 1 1 * |
| @annually | | (same as @yearly) | | 0 0 1 1 * |
| @monthly | | Run once a month | | 0 0 1 * * |
| @weekly | | Run once a week | | 0 0 * * 0 |
| @daily | | Run once a day | | 0 0 * * * |
| @midnight | | (same as @daily) | | 0 0 * * * |
| @hourly | | Run once an hour | | 0 * * * * |
CRON的优先级是高于发送延迟属性的。如果定义了发送次数和发送间隔的两个属性的话,那么定时器就会在CRON触发消息发送的时候,按照发送次数和发送间隔属性的配置来执行。以一个例子来解释上述声明。假设一个消息要被发送10次,每次间隔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 中,可以通过设置时间戳插件来实现消息过期时间设置。该插件可以根据消息的过期时间来删除消息。配置示例如下: ... <!-- 86,400,000ms = 1 day --> ... 其中,ttlCeiling 表示过期时间...
本文档详细介绍了在Apache ActiveMQ 5.15.3版本中如何进行消息过期时间的设置,以及如何配置自动清除机制,特别是针对死信队列的处理方式。 #### 1. 消息过期设置 ##### 参数详解 - **Message 过期则客户端不能...
2. **创建消息生产者**:在Spring中,你可以使用`JmsTemplate`作为消息生产者,发送消息到ActiveMQ的队列或主题。配置`JmsTemplate`并设置ActiveMQ的连接工厂,然后在需要发送消息的地方调用其`convertAndSend`方法...
ActiveMQ 通过心跳包检测客户端状态,但长时间发送消息可能导致客户端在等待服务器响应时关闭连接,从而丢失消息。为防止这种情况,可以使用持久化消息、及时处理非持久化消息,或启用事务。事务模式确保消息在...
异步发送的条件包括:发送回调为空、发送超时时间小于等于0、消息不需要响应、连接未设置为同步发送以及消息是非持久化或已设置为异步发送或在事务中。 当消息发送后,`ActiveMQConnection.asyncSendPacket`和`...
在发送消息时,我们可以设置这个字段为当前时间加上期望的延迟时间,ActiveMQ在接收到这样的消息后会将其放置在队列中,并在指定的时间到达时才将消息投递给消费者。这可以通过编程的方式实现,比如在`...
实现了ActiveMQ的初步封装,比较适合新手入门学习,简单明了
在本文中,我们将深入探讨如何使用ActiveMQ发送和接收基于protobuf(Protocol Buffers)协议的消息,同时也会介绍如何进行ActiveMQ的简化封装和配置自动重连机制。 首先,protobuf是Google开发的一种数据序列化协议...
- **time.cpp**:可能包含与时间相关的函数,如计时器或延迟发送等,用于消息处理的时间控制。 4. **跨平台兼容性**: 描述提到该客户端在 Linux 和 Windows 上都适用,这意味着代码可能使用了跨平台的库,如 ...
消息生成端是应用中的生产者角色,负责创建和发送消息到ActiveMQ服务器。这通常通过JMS API实现,其中`MessageProducer`接口用于创建并发送消息。开发者可以创建文本消息、对象消息、字节数组消息等各种类型,并指定...
在ActiveMQ中,事务提供了消息发送的原子性。通过开启事务,多个消息可以在一个事务中发送,只有当事务提交时,这些消息才会被实际投递到队列。如果事务回滚,所有消息都不会被发送,从而保证了数据的一致性。例如,...
ActiveMQ in Action书籍可能包含对如何安装和配置ActiveMQ的描述,如何使用ActiveMQ的管理工具,以及如何编程使用ActiveMQ进行消息的发送和接收等。这些内容对于想要使用ActiveMQ进行消息集成和消息传递的应用程序...
* 点对点(PTP)消息传递域:每个消息只能有一个消费者,消息的生产者和消费者之间没有时间上的相关性。 * 发布/订阅消息传递域:每个消息可以有多个消费者,生产者和消费者之间有时间上的相关性。 3. JMS消息生产...
ActiveMQ 是一款开源的消息中间件,它遵循Java Message Service (JMS) 规范,用于在分布式系统中高效地传输消息。在深入了解ActiveMQ之前,我们先来了解一下JMS的基本概念。 JMS(Java Message Service)是Java平台...
ActiveMQ是Apache软件基金会下的一个开源消息中间件,它遵循JMS(Java消息服务)规范,用于在分布式系统中传递消息。在本项目示例中,我们将深入探讨如何使用MyEclipse 10开发基于ActiveMQ的消息通信应用。 1. **...
3. **测试指标**:包括吞吐量(每秒处理的消息数量)、延迟(消息从发送到接收的时间)、资源利用率(CPU、内存、磁盘I/O等)以及错误率等。 4. **测试结果分析**:对各项指标的详细分析,可能会对比不同配置或优化...
5. **如何在 ActiveMQ 中设置消息的过期时间?** 可以在创建消息时设置 `MessageProducer` 的 `DeliveryDelay` 属性,或者在 Destination 上配置 `MessageExpirePolicy` 来设定全局过期时间。 6. **ActiveMQ 的...
在代码中,如果消息处理失败,可以抛出异常,ActiveMQ会根据重试策略进行消息的重新发送。 ```xml <!-- activemq.xml配置文件 --> ``` 此外,你还可以通过监听消息的Acknowledgement来控制重发,例如,在消费...
5. **ActiveMQ与Quartz的结合**:在某些场景下,可能需要结合使用,例如,Quartz可以定时触发向ActiveMQ发送消息的任务,以实现定时推送服务。 6. **实战示例**:压缩包中的"ActiveMQ_Test2"可能是一个Java项目,...
这种特性使得消息队列具备异步处理的能力,可以降低系统的响应时间,并且解耦发送方和接收方,使它们独立运作。 ActiveMQ 提供了多种消息模型,包括点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)模式...