ActiveMQ延迟和定时投递

AMQ的延迟和定时投递用起来非常的简单,可根据产品的需要在消息生产时添加必要的属性,即可达到目的。前提是已经为Broker添加了“调度支持”。

来自官方的说明:

http://activemq.apache.org/delay-and-schedule-message-delivery.html

ActiveMQ from version 5.4 has an optional persistent scheduler built into the ActiveMQ message broker. It is enabled by setting the broker schedulerSupport attribute to true in the xml configuration.
An ActiveMQ client can take advantage of a delayed delivery by using the following message properties:

Property name

type

description

AMQ_SCHEDULED_DELAY

long

The time in milliseconds that a message will wait before being scheduled to be delivered by the broker

AMQ_SCHEDULED_PERIOD

long

The time in milliseconds to wait after the start time to wait before scheduling the message again

AMQ_SCHEDULED_REPEAT

int

The number of times to repeat scheduling a message for delivery

AMQ_SCHEDULED_CRON

String

Use a Cron entry to set the schedule

For the connivence of Java JMS clients - there's an interface with the property names used for scheduling at org.apache.activemq.ScheduledMessage.

For example, to have a message scheduled for delivery in 60 seconds - you would need to set the AMQ_SCHEDULED_DELAY

property:

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);

You can set a message to wait with an initial delay, and the repeat delivery 10 times, waiting 10 seconds between each re-delivery:

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);

You can also use CRON to schedule a message, for example, if you want a message scheduled to be delivered every hour, you would need to set the CRON entry to be - 0 * * * * - e.g.

MessageProducer producer = session.createProducer(destination);
TextMessage message = session.createTextMessage("test msg");
message.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, " 0 * * * *");
producer.send(message);

CRON scheduling takes priority over using message delay - however, if a repeat and period is set with a CRON entry, the ActiveMQ scheduler will schedule delivery of the message for every time the CRON entry fires. Easier to explain with an example. Supposing that you want a message to be delivered 10 times, with a one second delay between each message - and you wanted this to happen every hour - you'd do this:

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)





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值