消息延时投递和定时投递(消息延时投递存在消息文件无法删除的BUG,请尽量不要使用。)
场景:有时候我们不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,或者我们想让消息没隔一定时间投递一次,一共投递指定的次数
如何使用:
1.首先需要服务器开启定时器支持
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" schedulerSupport="true">
</broker>
2.在发送端代码中设置消息的延时定时属性,部分方法示例如下:
public void send(final Serializable message)
{
MessageCreator creator = new MessageCreator()
{
@Override
public Message createMessage(Session session) throws JMSException
{
if (message instanceof String)
{
Message msg = session.createTextMessage((String) message);
//延时60秒钟投递
msg.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY,60000);
//投递10次
msg.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT,10);
return msg;
}
else
{
ObjectMessage objMessage = session.createObjectMessage();
objMessage.setObject(message);
return objMessage;
}
}
};
配置参数:
使用 CRON 表达式的例子:
// 每小时发生消息投递
message.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CR