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/standardmesagge-groupmessage-group2 를 참조하십시오.