2011-02-11 5 views
14

나는 다음과 같은 설정에 문제가 있어요 듣고 MDB 인스턴스의 수를 제한하는 방법 :JBoss의 JMS 큐

이 JMS 큐에 이메일 MSG를 보내

자바 응용 프로그램이 다음 MDB 대기열을 듣고 onMessage 메소드로 이메일 메시지를 받으면 Gmail SMTP에서 연결을 열고 이메일을 SMTP로 보내고 연결을 닫습니다. JMS 큐의 모든 메시지에서이 작업을 수행합니다.

대기열에 최대 5 개의 메시지가 동시에있을 때 유용합니다. 모든 메시지는 MDB의 5 가지 인스턴스에 의해 동시에 수집되므로 Gmail SMTP 서버에 5 개의 동시 연결이 있습니다. 그러나 JMS 대기열에 메시지가 더 많으면 Gmail SMTP 서버에서 연결 오류가 발생합니다. 첫 번째 메시지 5 개가 올바르게 전송되지만 묶음의 나머지는 전송되지 않으므로 더 이상 큐에 없기 때문에 다른 메시지가 손실됩니다.

제 질문은 JMS 대기열을 수신 대기하는 MDB 인스턴스의 수를 제한 할 수 있습니까? 최대 MDB가 5 인 경우 대기열에 1000 개의 메시지가 있어도 대기열을 비우는 데 시간이 오래 걸리지 만 최소한 메시지는 손실되지 않습니다.

이 문제를 해결하기위한 다른 제안 사항은 매우 만족 스러울 것입니다.

[서버] 릴리스 ID : 보스 [일체] 4.2.3.GA (빌드 : SVNTag = JBoss_4_2_3_GA 날짜 = 200,807,181,417)

및 구성 여기

는 제이보스 버전 의 MDB는 다음과 같습니다 :

@MessageDriven(activationConfig = { 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/emailQueue") 
}) 

더 필요합니까?

감사합니다 2011-02-14

편집은 어쩌면 내가 잘못 모든 MDB 인스턴스의 수를 제한하고자 해요. JMS 스레드 수에 대한 설정을 보았습니다. MDB에 게시 할 스레드 수를 제한하면 문제가 해결 될 수 있습니까? 메시지를 다시 게시하기 전에 MDB를 사용할 수있을 때까지 JMS가 대기합니까? 거기에 부작용이 있습니까? 네가 그래. 감사

+0

어떤 버전의 JBoss가 있습니까? MDB 설정은 어떤 모습입니까? – skaffman

+0

@skaffman : Jboss 버전은 다음과 같습니다. [서버] 릴리스 ID : JBoss [Trinity] 4.2.3.GA (빌드 : SVNTag = JBoss_4_2_3_GA date = 200807181417) MDB의 구성은 다음과 같습니다. @MessageDriven ( activationConfig = { @ActivationConfigProperty ( propertyName = "대상 유형", propertyValue = "javax.jms.큐 " ), @ActivationConfigProperty ( propertyName 형식 ="대상 ​​", 는 PropertyValue ="큐/emailQueue ") } ) 당신이 더 필요하십니까? 감사 – Alain

+0

과 같이 게시 할 때 읽을 아니라, 질문에 정보 추가 덧글 – skaffman

답변

14

가 추가 acitivation의 구성 속성을 시도
최종 편집 : someNumber 원하는 인스턴스의 최대 수입니다

@ActivationConfigProperty(propertyName = "maxSession", propertyValue = "someNumber") 

.

+0

maxSession 대신 maxSessions가되어야한다고 생각합니다. 값 1과 둘 이상을 동시에 시도했습니다. –

+3

@LoJuego 지원되는 모든 활성화 구성 속성이 다음에 나열됩니다. 이 튜토리얼 : http : //docs.jboss.or g/ejb3/docs/tutorial/mdb/mdb.html을 참조하십시오. maxSession은 올바른 속성 이름입니다. –

+0

WebLogic에서 비슷한 속성을 적용 할 수 있습니까? –

0

JBoss 4에 stateless 세션 빈의 인스턴스를 제한하는 옵션이있는 경우 메시지 처리 코드를이 bean으로 이동하고 들어오는 JMS 메시지를 전달할 수 있습니다. (IIRC에서 Bean의 오류가 발생하면 JMS 메시지가 승인되지 않아 자동으로 다시 시도하게됩니다).