使用JMSTEM板(Spring JMS)重复安排一条消息以进行交付激活



我以以下方式将消息发送给队列:

我想安排重复我的消息。我的意思是,无论我的这条线jsmClient.send(identifier);在控制器中(如下所示)发送了什么消息,我想继续发送,说10或100次(取决于我设置的计时器)。在我要求停止之前,我的消费者(未显示)将继续消耗相同的消息。例如,即使如果我想第五次停止接收消息(如果生产者发送消息10次)或第50次(如果生产者发送消息100次,则将发送消息),我的制片人将发送10或100次。我应该能够做到这一点。

由于我使用JMS 2和ActiveMQ(版本5.15.8),因此我无法弄清楚以下内容:

延迟和计划消息传递文档在以下部分中讨论了AMQ_SCHEDULED_REPEAT

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

如果我正确理解,以上代码不考虑JMS 2,而是JMS 1.1?我想知道我需要在下面的代码中进行哪些更改,以便我可以做类似message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, repeat);的事情。我找不到有关弹簧文档中的时间表重复的有用信息。

我的JMSProducer类:

@Component
public class JmsProducer {
    @Autowired
    JmsTemplate jmsTemplate;
    @Value("${jms.queue.destination}")
    String destinationQueue;
    public void send(String msg){
        jmsTemplate.convertAndSend(destinationQueue, msg);
    }
}

JMSCLIENT接口:

public interface JmsClient {
    public void send(String msg);
}

JMSClientImpl类:

@Service
public class JmsClientImpl implements JmsClient{

    @Autowired
    JmsProducer jmsProducer;
    @Override
    public void send(String msg) {
        jmsProducer.send(msg);
    }

}

在我的休息控制器中,我正在发送这样的消息:

try {
            DataRetrieverDao dataRetrieverDao = (DataRetrieverDao) context.getBean("dataRetrieverDao");
            String identifier=dataRetrieverDao.sendDownloadInfo(user_id);
            logger.info("VALUE OF STRING: "+identifier);
            jsmClient.send(identifier);

        }

基于我的研究:

在此stackoverflow线程中,JMS 2.0在ActiveMQ软件包中不支持,所以我应该切换到Artemis吗?但是随后,我从上面的JMStemplate一侧问的问题仍然在我心中。请告知我在这种情况下最好的行动方案是什么。谢谢

延迟&ActiveMQ 5.x中的计划消息传递工作是,生产者使用特殊属性在消息上设置延迟/时间表,并发送消息一次。经纪人收到消息后,它将根据延迟&计划在消息上设置。因此,在延迟&的背景下,并不准确地说:" ...我的制作人将发送10或100次。"计划的消息。

延迟&计划的消息传递是ActiveMQ 5.X的功能,而不是JMS规范的一部分。Spring JMS库和/或文档不会提及此功能,因为它是ActiveMQ 5.x。

唯一的

正如您注意的那样,ActiveMQ 5.X不支持JMS 2.0,因此,如果您想要JMS 2.0支持,则需要切换到ActiveMQ Artemis。但是,ActiveMQ Artemis不支持延迟&按用户邮件列表中讨论的计划消息。因此,如果您想延迟&您可能需要坚持使用JMS 1.1的计划消息或通过JMS 2.0和ActiveMQ Artemis来实现您要寻找的功能的不同方法。

相关内容

最新更新