4
我試圖使用Spring JMSTemplate.receive(String)方法以同步模式從隊列中獲取所有消息。Spring JMSTemplate在一次事務中接收所有消息
問題是我總是隻有一條消息。下面是代碼:
@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>
我想要實現的是有一個事務,並且在這個事務中我想獲得所有待處理的消息。