Livraison retardée et livraison programmée avec les fonctionnalités avancées d'activeMQ

La version 5.4 d'ActiveMQ dispose d'un planificateur de persistance facultatif intégré au courtier de messages ActiveMQ. Cette fonctionnalité peut être activée en définissant la propriété schedulerSupport du courtier sur true dans la "configuration Xml" . Les clients ActiveMQ peuvent tirer parti de la remise différée en utilisant les propriétés de message suivantes.

Configurez d'abord l'attribut schedulerSupport sur true dans activemq.xml

<broker xmlns="http://activemq.apache.org/schema/core"  brokerName="localhost" dataDirectory="${ activemq. data}" schedulerSupport="true" />
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY,10*1000); 
//延时10秒发送
message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT,10); 
//重复投递10次
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD,5*1000); 
//重复投递的间隔时间:5秒
message.setStringProperty(ScheduledMessage.AMQ_SCHEDULED_CRON, "0 * * * *"); 
//使用Corn表达式

Remarque importante cron n'est pas l'expression de tâche définie au printemps mais l'expression de tâche fixe du système d'exploitation, car l'installation actuelle de mq utilise des expressions Linux lors des tests sur Linux

  La priorité de l'expression CRON est plus élevée que les trois autres paramètres. S'il y a des paramètres de répétition et de période pendant que CRON est défini, la livraison sera répétée chaque fois que le CRON est exécuté et l'intervalle est une période à chaque fois. En d'autres termes, le réglage est un effet superposé. Par exemple, un message sera livré 10 fois toutes les heures, en commençant par un délai de 1 seconde et un intervalle de 1 seconde à chaque fois 

Exemple de code:

package com.demo;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.ActiveMQMessageProducer;
import org.apache.activemq.AsyncCallback;
import org.apache.activemq.ScheduledMessage;
import org.springframework.scheduling.annotation.Scheduled;

import javax.jms.*;
import java.util.UUID;

/**
 * 异步投递
 */
public class Producer_延迟投递 {
    private static final String ACTIVEMQ_URL = "tcp://192.168.10.130:61616";
    private static final String ACTIVEMQ_QUEUE_NAME = "Queue-延迟投递";

    public static void main(String[] args) throws JMSException {
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();
        activeMQConnectionFactory.setBrokerURL(ACTIVEMQ_URL);
        Connection connection = activeMQConnectionFactory.createConnection();
        connection.start();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Queue queue = session.createQueue(ACTIVEMQ_QUEUE_NAME);
        //向上转型到ActiveMQMessageProducer
        MessageProducer messageProducer = session.createProducer(queue);
        long delay = 3 * 1000;      //延迟投递的时间
        long period = 4 * 1000;     //每次投递的时间间隔
        int repeat = 5;                     //投递的次数

        for (int i = 0; i < 3; i++) {
            TextMessage textMessage = session.createTextMessage("message-延时投递" + i);
            //给消息设置属性以便MQ服务器读取到这些信息,好做对应的处理
            textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
            textMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, period);
            textMessage.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, repeat);
            messageProducer.send(textMessage);
        }
        messageProducer.close();
        session.close();
        connection.close();
    }
}

 

 

 

 

Je suppose que tu aimes

Origine blog.csdn.net/m0_46405589/article/details/115180203
conseillé
Classement