2012-06-20 4 views
1

나는 InnoDB와 함께 MySql을 사용하여 DAL로 최대 절전 모드를 사용하는 웹 서비스를 가지고있다.다중 스레드 환경에서 최대 절전 모드

웹 서비스 호출을 정말 짧게하고 싶습니다. 클라이언트 쪽에서 더 나은 사용자 경험을 위해 메시 지 대기열에 2 개의 스레드를 사용하고 있습니다.

1 개의 스레드가 메시지에서 userId를 가져오고 DB에서 사용자를로드하고 전자 메일 주소를 받고 전자 메일을 보냅니다.

두 번째 스레드는 다음과 같이 사용됩니다. 웹 서비스 호출 .... 몇 가지 작업을 수행합니다. DB에 ActivityLog를 추가합니다. Doing session.save (log); session.commit(); 이제 logId를 사용하여 스레드에 메시지를 보냅니다. 메시지 수신 - 타임 라인 테이블 (userid, logId)에 새 항목을 삽입하십시오. 세션은 주 논리 세션 개체와 다른 세션 개체입니다.

여기에 문제가 있습니까? 게으른로드 중입니까? 쓰레드는 commit() 후에 쓰레드로 메시지가 보내지기 때문에?

답변

2

웹 서비스에 대한 동기식 응답이 필요없는 경우 웹 서비스 -> 메시지 대기열 아키텍처가 매우 표준입니다.

웹 서비스에서 원하는 것을 데이터베이스에 저장하면 메시지 큐가 나중에이를 선택합니다.

다른 세션은 문제가되지 않지만 이러한 스레드 각각에 대해 하나의 정적 세션이있는 경우 세션 확장 : 세션 캐시에 개체가 쌓일 수 있습니다. 기타 정보 : http://suryagaddipati.wordpress.com/2008/02/15/hibernate-rich-clients-and-long-running-sessions/

+0

글쎄, 나는 sessionFactory, getCurrentSession()을 호출하고있다. cfg 파일에서 스레드 동안. 내가 곤경에 처한거야? – user1365799