2012-01-27 4 views
3

WebSphere MQ 대기열의 메시지를 일괄 처리 할 수 ​​있습니까? 예 : 그것은을 단일 BATCH_SIZE까지 메시지 (예를 들어, 목록 [메시지])의 컬렉션을 반환WebSphere MQ : 일괄 처리 메시지 사용

messages = queue.receiveBatch(BATCH_SIZE) 

"수신"?

(나는 트랜잭션 내에서 BATCH_SIZE 시간을받을 호출 할 수 있지만, 내가 무엇을 찾고되지 않습니다) 무엇의 모습,

message groups 경우를 해결할 수 있습니까? "메시지 그룹"이 하나씩 메시지를 읽는 것처럼 보이는 것은 올바른 해결책이 아닌 것 같습니다.

답변

3

아니요. WMQ에는 비 지속성 메시지가 클라이언트로 스트리밍되는 미리 읽기가 있지만 클라이언트도 메시지 당 하나의 GET (또는 동등한 언어)을 실행합니다.

비동기 메시징의 속성 중 하나는 메시지가 원자 적이라고 가정합니다. 메시지의 다른 메시지에 대한 종속성을 연관성이라고하고 메시지 친화력으로 비동기 모델을 손상시킵니다. (그러나 모든 전송은 유사성과 메시지 그룹화에 대한 편의를 제공합니다.) 따라서 GET은 메시지에 1 : 1로 대응하는 원자 단위의 작업 단위입니다.

WMQ 메시지는 최대 100MB까지 임의의 크기 일 수 있으며 하나 이상의 논리적 메시지가 여러 물리적 메시지로 분할되는 경우 그 이상의 메시지를 조각 낼 수 있습니다. 분할 된 메시지의 경우 하나의 GET은 여러 개의 메시지를 소비하지만 응용 프로그램에는 하나의 논리 메시지 만 반환됩니다.

WMQ 채널은 일괄 처리를 사용하며 최근까지는 메시지 수로 엄격하게 구성되었습니다. 그러나 앞서 언급 한 메시지 크기의 가변성으로 인해 크고 작은 메시지가 모두 같은 채널을 통과 할 경우 튜닝 채널이 매우 어려워졌습니다. WMQ v7.1에서 채널 일괄 처리는 이제 메시지 수나 바이트 수 중에서 경계에 맞춰집니다. 메시지 GET 배치의 모든 개념은 메모리에 심각한 영향을 미치지 않도록 유사한 조정 기능이 필요합니다. 로깅, 대기열 크기 등과 같은 추가 상호 작용이 있습니다. 하나의 메시지가 실패하면 전체 배치를 롤백해야합니다.

성능 향상을 목적으로하는 경우 트랜잭션을 사용하십시오. 동기 점에서 메시지를 수신 할 때 메시지 수를 GET (COMMIT 통화) 사이에서 조정할 수 있습니다. COMMIT 간격> 1을 사용하면 성능을 상당히 향상시킬 수 있습니다. 그러나 이는 약간의 시행 착오로 판단 할 수있는 임계 값 이상으로 떨어집니다. 실적 보고서를 통해 귀하의 플랫폼에 가장 적합한 번호를 결정할 수 있습니다. 이들은 SupportPacs main page에서 얻을 수 있습니다. 이름이 MPxx와 같은 항목을 찾습니다.

메시지가 지속되지 않고 연결 해제시 일부 메시지가 손실 될 수있는 경우 최신 버전의 WMQ가 있다고 가정하면 미리 읽기를 사용할 수 있습니다. 그러면 GET이 호출 될 때 다음 메시지가 이미 로컬 버퍼에 있도록 메시지가 응용 프로그램의 WMQ 클라이언트로 스트리밍됩니다.

한편, 원래 게시물의 링크는 WMB 문서에있었습니다. WMQ 문서는 here입니다.

+0

답장 => 감사합니다. 나는 실제로 소비 성능을 고려하고있다.XA 트랜잭션에 참여할 X 메시지를 읽어야합니다. => DB_와 _Transformed_ 및 _sent_에 _persisted되어야하며 다른 큐 (모두 동일한 tx에 있음)에 있어야합니다. _are_ 영구적 인 메시지는 영구 메시지에 대한 멋진 스트리밍 기능 (예 : 미리 읽기)이 있습니까? –

+0

아니요, 미리 읽기 기능을 사용하면 클라이언트가 끝나면 메시지를 롤백 할 수 없습니다. 해당 서비스 품질은 지속적인 메시지에 적합하지 않습니다. WMQ를 영구 보존하면 WMQ를 잃어 버릴 확률을 원하지 않습니다. 다른 한편, 클라이언트는 메시지 흐름, 메시지 동질성 등에 대해 알고있는 앱만이 동기 점 아래에서 메시지를 가져올 수 없습니다. 하나의 포이즌 메시지는 잠재적으로 전체 재 할당 카운터를 동시에 증가시키기 때문에 전체 배치가 재 대기열을 야기 할 수 있습니다. –

+0

그런데 XA 트랜잭션을 수행하고 DB와의 조정을 수행하는 경우 WebSphere App Server (WMA 클라이언트와 XA 코디네이터가되는 방법을 알고 있음) 또는 WMQ Extended Transactional Client를 사용해야합니다. WMQ 기본 클라이언트는 비 IBM 응용 프로그램 서버에서만 단일 단계 커밋을 수행 할 수 있습니다. –