Я использую MQ в своем проекте через SpringJMS, в качестве брокера использую ActiveMQ. Мне нужно установить expiration на основе сообщений, поэтому я попытался использовать message.setJMSExpiration
, но безуспешно. Все сообщения, поступающие в ActiveMQ, имеют expiration = 0.Установить истечение за сообщение с SpringJMS
У кого-нибудь есть успех с установкой истечения срока действия на сообщение с использованием Spring?
Для настройки JmsTemplate я использовал значение по умолчанию explicitQosEnabled = false;
, поэтому я ожидал, что вы останетесь с моим реквизитом Message. Но, как я вижу в ActiveMQSession.class это свойство сообщения будет переопределение:
long expiration = 0L;
if (!producer.getDisableMessageTimestamp()) {
long timeStamp = System.currentTimeMillis();
message.setJMSTimestamp(timeStamp);
if (timeToLive > 0) {
expiration = timeToLive + timeStamp;
}
}
message.setJMSExpiration(expiration);
//me: timeToLive coming from default values of Producer/JmsTemplate...
Что я делаю неправильно? или это невозможно с помощью этих инструментов.
Спасибо, пропустите этот момент, я могу установить '' explicitQosEnabled' к true', но функция, producer.send() с ТТЛ в параметрах не доступны для меня через JmsTemplate. – iMysak
Нет, вы установили TTL на шаблон; то, когда включена явная QOS, шаблон будет устанавливать TTL на отправке. [См. Здесь] (https://github.com/spring-projects/spring-framework/blob/master/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java#L622). –
yep, это довольно ясно, но в этом случае я не могу использовать различное истечение для разных сообщений, как мне нужно. Я не могу использовать его в параллельном режиме. – iMysak