ActiveMQ消息的延时和定时投递

基本介绍

ActiveMQ对消息延时和定时投递做了很好的支持,其内部启动Scheduled来对该功能支持,也提供了一个封装的消息类型:org.apache.activemq.ScheduledMessage,只需要把几个描述消息定时调度方式的参数作为属性添加到消息,broker端的调度器就会按照我们想要的行为去处理消息。

各个参数如下表格:

Property nametypedescription
AMQ_SCHEDULED_DELAYlong延迟投递的时间
AMQ_SCHEDULED_PERIODlong重复投递的时间间隔
AMQ_SCHEDULED_REPEATint重复投递次数
AMQ_SCHEDULED_CRONStringCron表达式

案例演示

  1. 需要在activemq.xml 中配置 schedulerSupport属性改为true(修改完成后重启activemq)
    在这里插入图片描述
  2. 在java代码中给message设置属性 使用ScheduledMessage类型来设置
    在这里插入图片描述

代码示例如下:

public class ActivemqProducer {
    static String BROCKER_URL = "tcp://192.168.72.129:61616";
    static String QUEUE_NAME = "queue_name8";

    public static void main(String[] args) throws JMSException {
        // 1. 创建连接工厂
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(BROCKER_URL);
        // 2. 获取连接 并启动
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        // 3. 创建session ,参数一:事务,参数二:签收
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //4. 创建目的地,队列
        Queue queue = session.createQueue(QUEUE_NAME);
        // 5.创建消息生产者 类型为ActiveMQMessageProducer
        MessageProducer messageProducer = session.createProducer(queue);
        messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);

        // 6.通过 messageProducer 发送3条消息
        for (int i = 1; i <= 3; i++) {
            TextMessage textMessage = session.createTextMessage("消息 ->" + i);
            // 设置延迟投递的时间为3秒
            textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 10*1000);
            // 设置重复投递的次数为3次
            textMessage.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 3);
            // 设置重复投递的间隔时间为2秒
            textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 2*1000);

            messageProducer.send(textMessage);
        }

        // 7.关闭资源
        messageProducer.close();
        session.close();
        connection.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值