【发布时间】:2013-07-30 12:05:48
【问题描述】:
我正在尝试使用 Spring JMSTemplate.receive(String) 方法以同步模式从队列中获取所有消息。
问题是我总是只收到一条消息。代码如下:
@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>
我想要实现的是有一个事务,并且在这个事务中我想获取所有待处理的消息。
【问题讨论】:
标签: spring transactions jms jmstemplate