Я отправляю сообщение в очередь следующим образом:
Я хочу запланировать повтор моего сообщения.Я имею в виду, что независимо от того, какое сообщение отправляет моя эта строка jsmClient.send(identifier);
в контроллере (показано ниже), я хочу продолжать отправку, скажем, 10 или 100 раз (в зависимости от установленного таймера).Мой потребитель (не показан ниже) будет продолжать потреблять одно и то же сообщение, пока я не прошу его прекратить.Например, даже если мой производитель собирается отправить сообщение 10 или 100 раз, если я хочу прекратить получать сообщение в 5-й раз (в случае, если производитель отправил сообщение 10 раз) или в 50-й раз (в случае, если производитель отправил сообщение 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);
.Я не смог найти много полезной информации о повторении расписания в документации Spring .
Мой класс 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);
}
}
В моем REST-контроллере я отправляю сообщение, подобное этому:
try {
DataRetrieverDao dataRetrieverDao = (DataRetrieverDao) context.getBean("dataRetrieverDao");
String identifier=dataRetrieverDao.sendDownloadInfo(user_id);
logger.info("VALUE OF STRING: "+identifier);
jsmClient.send(identifier);
}
Основываясь на моих исследованиях:
В этот поток стекового потока , JMS 2.0 не поддерживается в пакете activemq, поэтому я должен вместо этого переключиться на artemis?Но тогда вопросы, которые я задавал со стороны jmsTemplate выше, все еще в моей голове.Пожалуйста, посоветуйте мне, как лучше поступить в этой ситуации.Спасибо