2012-06-01 2 views
0

jms : message-driven-channel-gateway로 구성된 SI를 사용하고 있습니다. 내 유스 케이스는 대기열에서 메시지를 받고, JDBC를 통해 데이터베이스에 저장하고, 대기열에서 메시지를 커밋 한 다음, 유형에 따라이 메시지가 다양한 채널을 통해 계속 흐르게합니다. 메시지가 연속적으로 오류가 있으면 데이터베이스에 저장된 원본을 가지고 있으므로이 메시지를 재생할 수 있으므로이 메시지는 정상입니다.Spring 통합, JMS 인바운드 채널 게이트웨이 및 트랜잭션

제 문제는 데이터베이스가 지속 된 직후 대기열에서 트랜잭션을 커밋하려고하는 것입니다. 이것은 효과적으로 중간 흐름이었고 스프링 트랜잭션 관리를 끝내고 바로 시도 할 수있었습니다. 외부 트랜잭션이 시작된 곳이기 때문에 데이터베이스가 지속 되어도 여전히 JMS 대기열에 메시지를 남기고 나면 오류가 발생하는 것처럼 적합하지 않습니다.

그래서 JMS 큐에서 메시지를 가져 와서 데이터베이스에 저장 한 다음 큐에서 메시지를 쉽게 커밋 할 수 있습니까?

감사합니다.

답변

0

DB 커밋 후에 asynch해야합니다 - DB 업데이트 후에 ExecutorChannel 또는 QueueChannel을 사용하십시오. 다운 스트림 흐름은 다른 스레드에서 실행될 것이고 트랜잭션은 핸드 오프 후에 커밋 할 것이다.