메시지 소비자는 연결 및 세션 컨텍스트 내에서 메시지를 받습니다. 클라이언트는 메시지 소비자 객체(MessageConsumer)를 사용하여 지정된 물리적 대상(API에서는 대상 객체로 표현됨)으로부터 메시지를 받습니다.
다음 세 가지 요소는 브로커가 소비자에게 메시지를 전달하는 방법에 영향을 미칩니다.
소비이 동기식인지 비동기식인지 여부
선택기를 사용하여 들어오는 메시지를 필터링하는지 여부
가입자가 영구 가입자인지 여부(메시지가 주제 대상에서 소비되는 경우)
메시지 전달 및 클라이언트 설계에 영향을 미치는 다른 중요한 요소로는 소비자에게 필요한 안정성 수준이 있습니다. 안정적인 메시징을 참조하십시오.
메시지 소비자는 동기식 또는 비동기식 메시지 소비를 지원할 수 있습니다.
동기식 소비는 소비자가 메시지 전달을 명시적으로 요청한 다음 메시지를 소비해야 함을 의미합니다.
메시지를 요청하는 데 사용되는 메소드에 따라 동기식 소비자는 메시지가 도착할 때까지 무한히 대기하거나, 지정된 시간 동안 메시지를 기다리거나, 소비 준비가 된 메시지가 없는 경우 즉시 돌아가도록 선택할 수 있습니다. ("소비됨"은 해당 객체를 클라이언트에서 즉시 사용할 수 있음을 의미합니다. 성공적으로 전송되었지만 브로커가 처리를 마치지 않은 메시지는 소비할 수 없습니다.)
비동기식 소비는 메시지가 소비자용으로 등록된 메시지 수신기 객체(MessageListener)로 자동 전달됨을 의미합니다. 세션 스레드가 메시지 수신기 객체의 onMessage() 메소드를 호출하면 클라이언트가 메시지를 소비합니다.
메시지 소비자는 메시지 선택기를 사용하여 등록 정보가 특정 선택 기준과 일치하는 메시지만 메시지 서비스에서 전달하게 할 수 있습니다. 소비자를 만들 때 이 기준을 지정합니다.
선택기는 SQL-like 구문을 사용하여 메시지 등록 정보에 대해 일치시킵니다. 예를 들면 다음과 같습니다.
color = ”red’ size > 10
Java 클라이언트는 대기열을 찾아볼 때 선택기를 지정할 수도 있습니다. 그러면 소비 대기 중인 선택된 메시지를 확인할 수 있습니다.
세션 객체를 사용하여 주제에 대한 영구 가입자를 만들 수 있습니다. 브로커는 가입자가 비활성화된 경우에도 이러한 종류의 가입자에 대한 메시지를 보관합니다.
브로커는 가입자의 상태를 유지하였다가 가입자가 다시 활성화되면 메시지를 다시 전달해야 하므로, 지정된 가입자가 들어오고 나가는 것을 식별할 수 있어야 합니다. 가입자의 아이디는 가입자를 만든 연결의 ClientID 등록 정보와 가입자를 만들 때 지정한 가입자 이름으로부터 구성됩니다.