我正在使用org.springframework.jms.core.JmsTemplate; 在我的项目中向SQS队列发送消息。
我在@Service中将JmsTemplate自动接线
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 bean的setter,是否应该重置它?在我的示例中,是否应该在sendMessageToFifo方法的末尾添加此代码:
jmsTemplate.setDeliveryDelay(0);
如果我不添加它,当我调用sendMessage而不是sendMessageToFifo时,传递延迟将不为零,对吗?
另外,我想问一下自动接线豆的呼叫设置器的最佳实践吗?
问题来源:Stack Overflow
默认情况下,所有bean均为单例,因此,一种方法是将其重置。
但是恕我直言,这是一个丑陋的解决方案。
您应该做的是定义一个JmsTemplate @Bean自定义配置的专用对象,然后autowire在需要的地方定义。
如果在其他JmsTemplate任何地方需要另一个,则定义第二个,@Bean然后使用分隔这两个@Qualifiers。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。