2014-02-21 2 views
1

ActiveMQ 대기열 (트랜잭션 없음)에서 이미 메시지를 읽거나 생성 할 수있는 독립 실행 형 응용 프로그램 (간단한 명령 행 jar)이 있습니다.2 개의 ActiveMQ 인스턴스 간의 트랜잭션 관리?

원격 ActiveMQ 큐에서 메시지를 읽고 다른 원격 ActiveMQ 큐에 넣을 수있는 기능을 추가하고 싶습니다. 2 개의 ActiveMQ는 완전히 다를 수 있으며 동일하지 않을 수 있으며 연결 문제가있을 경우 전송 중에 메시지가 손실되지 않도록해야합니다.

2 개의 완전히 다른 ActiveMQ 사이에서 전송하기 때문에 트랜잭션에 대한 많은 읽기 작업을 수행하고 있으며 이해할 수있는 한 간단한 JmsTransactionManager만으로는 충분하지 않지만 분산 트랜잭션 관리가 필요합니다 (XA 트랜잭션과 유사).

나는 여러 다른 라이브러리와 관련하여 인터넷에서 발견 된 코드 예제의 바다에서 완전히 잃어버린다.

아무도 나를이 문제에 대한 가장 간단한 해결책을 찾는 방법을 가리킬 수 있습니까? 어쨌든 Spring 위에 JTA를 사용해야합니까? (비 -J2ee 응용 프로그램 서버 환경에서 JTA를 사용할 수 있습니까?) 나는 이미 봄을 사용하여 메시지를 보내고 받기 위해 jmstemplate을 사용하고 있으므로 봄을 사용하면 좋을 것이다.

답변

1

두 번째 원격 ActiveMQ에 읽기와 동일한 트랜잭션 범위에 쓰기 작업이 필요하지 않은 경우 분산 트랜잭션없이이 작업을 수행 할 수 있습니다. 두 번째 원격 ActiveMQ에 성공적으로 쓸 때까지 읽기 트랜잭션을 열어 둘 수 있습니다. 일단 성공하면 읽기 트랜잭션을 커밋 할 수 있습니다. 그러나 이것은 전송 후 실패한 경우에 읽기 커밋 이전에 메시지가 다시 전송되는 것을 의미합니다. 따라서, 이것은 중복 송신이 괜찮다고 가정합니다. 실패한 경우 중복 송신을 허용 할 수 없으면 분산 트랜잭션이 있어야합니다.

+0

감사합니다. 나는 똑같은 생각을했지만 복제 시나리오를 실현하지 못했습니다. 솔직히 나는 가능하다면 복제본을 피하고 싶습니다. 현재 성능은 실제로 문제가 아니므로 분산 트랜잭션을 고려할 것입니다. 나는 이런 시나리오에서 Atomikos와 같은 3PP JTA 구현으로 더 나을 것이 낫겠습니까? 맞습니까? 또한 동일한 원격 ActiveMQ의 2 대기열 사이에서 메시지를 단순히 이동시키는 시나리오에서는 스프링의 JmsTransactionManager가 충분합니까 아니면 포함 된 인스턴스에만 해당할까요? – ByteFlinger

+0

분산 된 (XA) 트랜잭션 구현에 대한 자세한 내용은 여기를 참조하십시오. http://stackoverflow.com/questions/22072100/xa-transactions-between-2-jms-brokers-activemq – ByteFlinger