다음 문제는 Message Queue 브로커에 영향을 줍니다.
영구 데이터 저장소에서 너무 많은 대상이 열리면 브로커에 액세스할 수 없게 됩니다. (버그 4953354)
해결 방법: 이 상황은 브로커가 시스템 파일 열기 설명자 제한에 도달하면 발생합니다. Solaris와 Linux에서 ulimit 명령을 사용하여 파일 설명자 제한을 늘립니다.
대상이 삭제되면 사용자와의 연결이 끊어집니다. (버그 5060787)
대상이 삭제되면 활성 사용자와의 연결이 끊어집니다. 사용자와의 연결이 끊어진 후에는 대상이 다시 생성된 후에도 더 이상 메시지를 받을 수 없습니다.
HTTP 연결 서비스를 사용하는 JMS 클라이언트가 갑자기 종료되면(예: Ctrl-C 사용) 브로커는 약 1분이 경과한 후 클라이언트 연결 및 연결된 모든 자원을 해제합니다.
클라이언트의 다른 인스턴스가 1분 이내에 시작되어 동일한 클라이언트 아이디, 영구 가입 또는 대기열을 사용하려고 하면 "클라이언트 아이디가 이미 사용 중"이라는 예외가 발생할 수 있습니다. 이것은 실제 문제가 아니라 위에서 설명한 종료 프로세스의 부작용일 뿐입니다. 약 1분 간의 지연 후에 클라이언트가 시작되면 모든 문제가 해결됩니다.
MySQL 데이터베이스를 데이터 저장소로 사용하는 경우 1MB보다 큰 메시지를 저장하면 "Packet for query is too large..."라는 SQL 예외가 발생합니다. (버그 6682815)
해결 방법: --max_allowed_packet 옵션을 기본값인 1MB보다 큰 값으로 설정하고 MySQL 서버를 시작합니다. 예를 들면, 다음 값을 사용합니다.
--max_allowed_packet=60M
MySQL 데이터베이스를 고가용성 공유 데이터 저장소로 사용하는 경우 MySQL 저장소 엔진을 NDBCLUSTER로 구성하는 메커니즘이 필요합니다. (버그 6691394)
해결 방법: 다음 등록 정보 값을 브로커의 config.properties 파일에 추가합니다(Sun GlassFish Message Queue 4.4 Administration Guide의 Enhanced Clusters: JDBC Configuration Properties 참조).
imq.persist.jdbc.mysql.tableoption=EMGINE=NDBCLUSTER
Oracle 9i(JDBC 9.2.0.x) 드라이버를 사용할 경우 브로커에서 "Failed to persist property..." 예외가 발생합니다. (버그 6626825)
해결 방법: 브로커가 최적화되는 Oracles 10g(JDBC 10.2.0.x) 드라이버를 사용합니다.
imq.persist.jdbc.derby.table.MYCONSTATE41.index.IDX2=CREATE INDEX &(index) ON $(name) (MESSAAGE_ID)
Java DB 데이터베이스를 데이터 저장소로 사용하는 경우 메시지를 저장하면 "lock could not be obtained within the time requested"라는 SQLException이 발생합니다. (버그 6691394)
해결 방법: 브로커의 config.properties 파일에 다음 등록 정보 값을 추가합니다.
imq.persist.jdbc.derby.table.MYCONSTATE41.index.IDX2=CREATE INDEX &(index) ON $(name) (MESSAAGE_ID)