Я использую org.springframework.jms.core.JmsTemplate; в моем проекте для отправки сообщений в очереди SQS.
Я автоматически подключил JmsTemplate в @ Service
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
@Service
public class AmazonSQSPublisherImpl implements AmazonSQSPublisher {
@Autowired
private JmsTemplate jmsTemplate;
@Override
public boolean sendMessageToFifo(String queueName, String message,
String messageGroupId, String messageDedupeId, long delayTime) throws EventBrokerException {
jmsTemplate.setDeliveryDelay(delayTime);
jmsTemplate.send(queueName, session -> {/* somemessage here*/});
}
@Override
public boolean sendMessage(String queueName, String message) throws EventBrokerException {
jmsTemplate.convertAndSend(queueName, message);
}
}
Здесь я использую setDeliveryDelay внутри jmsTemplate. Итак, мой вопрос: как я знаю, бин по умолчанию одноэлементный. если я использовал установщик bean-компонента jmsTemplate, должен ли я его сбросить? В моем примере я должен добавить это в конце метода sendMessageToFifo:
jmsTemplate.setDeliveryDelay(0);
Если я не добавлю это, когда я вызываю sendMessage вместо sendMessageToFifo задержка доставки не будет равна нулю, верно?
Кроме того, я хочу спросить, есть ли какие-либо передовые практики для установщика вызовов автоматического связанного компонента?