我正在尝试使用Spring JMSTemplate.receive(String)方法以同步模式获取队列中的所有消息。
问题在于我总是只能收到一条消息。这是代码:
如果我删除@Transactional注释,我将获得所有消息,但所有操作都不在事务中,因此如果稍后在处理这些消息时出现异常,则会丢失消息。
这是我的JMSTemplate bean的定义。
我想实现的是在一个事务中获取所有未处理的消息。
问题在于我总是只能收到一条消息。这是代码:
@Transactional
public List<Message> receiveAllFromQueue(String destination) {
List<Message> messages = new ArrayList<Message>();
Message message;
while ((message = queueJmsTemplate.receive(destination)) != null) {
messages.add(message);
}
return messages;
}
如果我删除@Transactional注释,我将获得所有消息,但所有操作都不在事务中,因此如果稍后在处理这些消息时出现异常,则会丢失消息。
这是我的JMSTemplate bean的定义。
<bean id="queueJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="pubSubDomain" value="false" />
<property name="receiveTimeout" value="1" />
<property name="sessionTransacted" value="true" />
</bean>
我想实现的是在一个事务中获取所有未处理的消息。