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>
달성하려는 목표는 하나의 트랜잭션을 갖는 것이고이 트랜잭션 내에서 모든 보류중인 메시지를 얻고 싶습니다.