2016-06-26 4 views
0

1 개의 세션과 1 개의 비동기 MessageListener를 사용하여 메시지를 받고 스레드의 각 메시지를 처리합니다. 쓰레드가 완료된 후에, 세션 커밋 (commit commit) 또는 롤백 (rollback)을 사용하여 메시지를 재 전달할 것인지 결정할 수 있습니다. 하지만 실제로 커밋/롤백 명령문이 스레드에서 처리중인 메시지에 어떤 영향을 줄 수 있는지에 대해 우려하고 있습니다. 예 :JMS 트랜잭션 세션 : 특정 메시지에 대한 커밋/롤백

1 session 
1 msg listener 

---TIME----> 
[MSG1: receive] --------------- processing -----------------> [MSG1: rollback] 
       [MSG2: receive] --------------> [MSG2: commit] 


- At the time MSG2 commit, may be MSG1 also be committed? 
If it is right, can I execute commit/rollback for specific MSG only? 

답변

0

코드를 공유하지는 않았지만 답변을 시도합니다.

첫째, 이것은

세션이 커밋 또는 롤백이 가 재 전달 할 수 있습니다 메시지를 결정하는 데 사용됩니다 또는

나는 생각한다, 당신이 메시지를 사용해서는 안 좋은 전략을하지 않는 것 re-delivery를 결정하는 승인 모드. 필요에 따라 메시지에 적절한 승인 모드를 설정하십시오.

둘째 JMS Session인 트랜잭션이 인 스레드가 존재하는 것 같습니다. 하나의 JMS 메시지가 commit 또는 rollback 인 경우 단일 JMS 메시지에 대해 세션을 처리해야합니다. 하나의 메시지는 다른 메시지에 영향을 미치는 여부를 당신의 스레드에 의존하지 않고 (당신은 트랜잭션을 정의하고 얼마나 많은 메시지가 트랜잭션을 구성하는 방법 즉, 어떻게 거래를 위해

Transacted Session

그래서, 당신의 commit 또는 rollback 생각 범위가 있습니다).

그것의 Sessioncommitrollback하지 Messagecommit 또는 rollback.

희망이 있습니다!

관련 문제