I am using org.springframework.jms.core.JmsTemplate; in my project to send messages to SQS queues.
I autowired JmsTemplate in a @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);
}
}
Here I use setDeliveryDelay inside the jmsTemplate. So my question is: As I known, bean is singleton by default. if I used the setter of the jmsTemplate bean, should I reset it? In my example, should I add this at the end of method sendMessageToFifo:
jmsTemplate.setDeliveryDelay(0);
If I don't add this, when I call sendMessage rather than sendMessageToFifo, the delivery delay will not be zero, right?
Also, I want to ask if any best practices for call setter of autowired bean??