11장. 메시지 그룹화
메시지 그룹은 다음과 같은 특징이 있는 메시지 집합입니다.
-
메시지 그룹의 메시지는 동일한 그룹 ID, 즉 그룹 식별자 속성을 공유합니다. JMS 메시지의 경우 속성은
JMSXGroupID입니다. - 메시지 그룹의 메시지는 큐에 많은 소비자가 있더라도 항상 동일한 소비자가 사용합니다. 다른 소비자는 원래 소비자가 종료되는 경우 메시지 그룹을 수신하도록 선택됩니다.
메시지 그룹은 속성의 특정 값에 대한 모든 메시지를 동일한 소비자가 직렬로 처리하려는 경우 유용합니다. 예를 들어 특정 스포일 구매에 대한 주문이 동일한 소비자에 의해 순차적으로 처리되도록 할 수 있습니다. 이렇게 하려면 소비자 풀을 만든 다음, 스톡 이름을 메시지 속성의 값으로 설정합니다. 이렇게 하면 특정 제품의 모든 메시지가 항상 동일한 소비자가 처리합니다.
큐의 기본 FIFO 의미 체계로 인해 그룹화되지 않은 메시지의 동시 처리에 영향을 미칠 수 있습니다.Grouped messages might impact the concurrent processing of non-grouped messages due to the underlying FIFO semantics of a queue. 예를 들어 큐의 헤드에 그룹화된 메시지 수가 100개 뒤에 1,000개가 아닌 메시지가 있는 경우 그룹화되지 않은 메시지가 그룹화되지 않은 메시지를 사용하기 전에 모든 그룹화된 메시지가 적절한 클라이언트로 전송됩니다. 이 시나리오의 기능 영향은 모든 그룹화된 메시지가 처리되는 동안 동시 메시지 처리의 일시적인 중단입니다. 메시지 그룹의 크기를 결정할 때 이러한 잠재적인 성능 장애를 염두에 두십시오. 그룹화되지 않은 메시지에서 그룹화된 메시지를 분리할지 여부를 고려합니다.
11.1. 자동 메시지 그룹화 링크 복사링크가 클립보드에 복사되었습니다!
그룹 ID를 직접 제공하는 대신 ID가 자동으로 생성될 수 있습니다. 이러한 방식으로 그룹화된 메시지는 여전히 단일 소비자가 직렬로 처리합니다.
절차
아래 예제에서는 Core JMS 클라이언트를 사용하여 메시지 그룹화를 활성화하는 방법을 보여줍니다.
그룹 ID 자동 생성을 활성화합니다.
JNDI 컨텍스트 환경을 사용하여 JMS 연결 팩토리를 인스턴스화하는 경우 연결 URL의 쿼리 문자열에
autogroup=truename-value 쌍을 추가합니다.java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory connectionFactory.myConnectionFactory=tcp://localhost:61616?autoGroup=trueJNDI를 사용하지 않는 경우
ActiveMQConnectonFactory에서autogroup을true로 설정합니다.ActiveMQConnectionFactory cf = ActiveMQJMSClient.createConnectionFactoryWithoutHA(...); cf.setAutoGroup(true);