11장. 메시지 그룹화
메시지 그룹은 다음과 같은 특성을 가진 메시지 집합입니다.
-
메시지 그룹의 메시지는 동일한 그룹 ID, 즉 동일한 그룹 식별자 속성을 공유합니다. JMS 메시지의 경우 속성은
JMSXGroupID
입니다. - 메시지 그룹의 메시지는 대기열에 많은 소비자가 있는 경우에도 항상 동일한 소비자가 사용합니다. 다른 소비자는 원래 소비자가 닫는 경우 메시지 그룹을 수신하도록 선택됩니다.Another consumer is chosen to receive a message group if the original consumer closes.
메시지 그룹은 특정 속성 값에 대한 모든 메시지를 동일한 소비자가 직렬로 처리하도록 할 때 유용합니다. 예를 들어, 특정 주식 구매에 대한 주문은 동일한 소비자에 의해 직렬로 처리되도록 할 수 있습니다. 이렇게 하려면 소비자 풀을 생성한 다음 stock 이름을 message 속성의 값으로 설정할 수 있습니다. 이렇게 하면 특정 주식에 대한 모든 메시지가 항상 동일한 소비자가 처리합니다.
그룹화된 메시지는 대기열의 기본 FIFO 의미로 인해 그룹화되지 않은 메시지의 동시 처리에 영향을 미칠 수 있습니다. 예를 들어 큐의 헤드에 그룹화된 메시지 100개가 있고 그룹에 속하지 않은 메시지가 1,000개이면 그룹화되지 않은 메시지가 모두 적절한 클라이언트에 전송됩니다. 이 시나리오에서 기능적 영향은 모든 그룹화된 메시지가 처리되는 동안 동시 메시지 처리를 일시 중지한 것입니다. 메시지 그룹의 크기를 결정할 때 이러한 잠재적인 성능 병목 현상을 염두에 두십시오. 그룹화되지 않은 메시지에서 그룹화된 메시지를 분리할지 여부를 고려하십시오.
11.1. client-Side Message Grouping
아래 예제에서는 코어 JMS 클라이언트를 사용하여 메시지 그룹화를 사용하는 방법을 보여줍니다.
절차
그룹 ID를 설정합니다.
JNDI를 사용하여 JMS 클라이언트의 JMS 연결 팩토리를 설정하는 경우
groupID
매개변수를 추가하고 값을 제공합니다. 이 연결 팩토리를 사용하여 전송된 모든 메시지에는 속성JMSXGroupID
가 지정된 값으로 설정됩니다.java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory connectionFactory.myConnectionFactory=tcp://localhost:61616?groupID=MyGroup
JNDI를 사용하지 않는 경우
setStringProperty()
메서드를 사용하여JMSXGroupID
속성을 설정합니다.Message message = new TextMessage(); message.setStringProperty("JMSXGroupID", "MyGroup"); producer.send(message);
관련 정보
메시지 그룹 구성 및 사용 방법에 대한 작업 예제는INSTA LL_DIR
/examples/features/standard의 mesagge-group
및 message-group2
를 참조하십시오.