4.11. 마지막 값 대기열 구성
마지막 값 큐 는 마지막 값 키 값이 있는 최신 메시지가 큐에 배치될 때 큐에서 메시지를 삭제하는 큐 유형입니다. 이 동작을 통해 마지막 값 큐는 동일한 키의 메시지에 대한 마지막 값만 유지합니다.
마지막 값 큐에 대한 간단한 사용 사례는 특정 스포지트의 최신 값만 관심 있는 SAP 가격을 모니터링하는 것입니다.
구성된 마지막 값 키가 없는 메시지가 마지막 값 큐로 전송되면 브로커는 이 메시지를 "일반" 메시지로 처리합니다. 이러한 메시지는 구성된 마지막 값 키가 도달한 새 메시지가 표시되면 대기열에서 제거되지 않습니다.
마지막 값 큐를 개별적으로 또는 주소 집합과 연결된 모든 큐에 대해 구성할 수 있습니다.
다음 절차에서는 이러한 방식으로 마지막 값 큐를 구성하는 방법을 보여줍니다.
4.11.1. 마지막 값 대기열을 개별적으로 구성
다음 절차에서는 마지막 값 큐를 개별적으로 구성하는 방법을 보여줍니다.
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 지정된 큐의 경우
last-value-key
키를 추가하고 사용자 지정 값을 지정합니다. 예를 들면 다음과 같습니다.<address name="my.address"> <multicast> <queue name="prices1" last-value-key="stock_ticker"/> </multicast> </address>
또는
_AMQ_LVQ_NAME
의 기본 마지막 값 키 이름을 사용하는 마지막 값 큐를 구성할 수 있습니다. 이렇게 하려면 지정된 큐에마지막-값
키를 추가합니다. 값을true
로 설정합니다. 예를 들면 다음과 같습니다.<address name="my.address"> <multicast> <queue name="prices1" last-value="true"/> </multicast> </address>
4.11.2. 주소에 대한 마지막 값 대기열 구성
다음 절차에서는 주소 또는 주소 집합에 대한 마지막 값 대기열을 구성하는 방법을 보여줍니다.
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. address-setting
요소에서 일치하는 주소에 대해default-last-value-key
를 추가합니다. 사용자 지정 값을 지정합니다. 예를 들면 다음과 같습니다.<address-setting match="lastValue"> <default-last-value-key>stock_ticker</default-last-value-key> </address-setting>
앞의 구성에 따라
lastValue
주소와 연결된 모든 큐는 lost_ticker
의 마지막 값 키를 사용합니다. 기본적으로default-last-value-key
값은 설정되지 않습니다.주소 집합에 대한 마지막 값 대기열을 구성하려면 주소 와일드카드를 지정할 수 있습니다. 예를 들면 다음과 같습니다.
<address-setting match="lastValue.*"> <default-last-value-key>stock_ticker</default-last-value-key> </address-setting>
또는
_AMQ_LVQ_NAME
의 기본 마지막 값 키 이름을 사용하도록 주소 또는 주소 세트 와 연결된 모든 대기열을 구성할 수 있습니다. 이렇게 하려면default-last-value-key
대신default-last-value-queue
를 추가합니다. 값을true
로 설정합니다. 예를 들면 다음과 같습니다.<address-setting match="lastValue"> <default-last-value-queue>true</default-last-value-queue> </address-setting>
추가 리소스
- 주소를 구성할 때 사용할 수 있는 와일드카드 구문에 대한 자세한 내용은 4.2절. “주소 집합에 주소 설정 적용” 을 참조하십시오.
4.11.3. 마지막 값 대기열 동작 예
이 예제에서는 마지막 값 큐의 동작을 보여줍니다.
broker.xml
구성 파일에서 다음과 같은 구성이 추가되었다고 가정합니다.
<address name="my.address"> <multicast> <queue name="prices1" last-value-key="stock_ticker"/> </multicast> </address>
앞의 구성에서는 price 1이라는 큐
를 만들고 마지막 값 키의 slice _ticker
.
이제 클라이언트가 두 개의 메시지를 전송한다고 가정합니다. 각 메세지는 property rail _ticker에 대해
. 각 메시지에는 rail ATN
의 동일한 값을 갖습니다_ price
라는 속성에 대해 다른 값이 있습니다. 각 메시지는 동일한 큐, price 1로
전송됩니다.
TextMessage message = session.createTextMessage("First message with last value property set"); message.setStringProperty("stock_ticker", "ATN"); message.setStringProperty("stock_price", "36.83"); producer.send(message);
TextMessage message = session.createTextMessage("Second message with last value property set"); message.setStringProperty("stock_ticker", "ATN"); message.setStringProperty("stock_price", "37.02"); producer.send(message);
Secur _ticker
의 마지막 값 키(이 경우 ATN
)에 대해 동일한 값을 가진 두 개의 메시지가 price 1 큐에
도달하면 최신 메시지만 큐에 남아 있으며 첫 번째 메시지가 제거됩니다. 명령줄에서 다음 줄을 입력하여 이 동작을 검증할 수 있습니다.
TextMessage messageReceived = (TextMessage)messageConsumer.receive(5000); System.out.format("Received message: %s\n", messageReceived.getText());
이 예에서 두 메시지 모두 마지막 값 키에 대해 동일한 값을 사용하고 두 번째 메시지가 첫 번째 뒤에 큐에서 수신되었기 때문에 표시되는 출력은 두 번째 메시지입니다.
4.11.4. 마지막 값 큐에 대해 분할되지 않은 사용 적용
소비자가 큐에 연결하면 일반 동작은 해당 소비자에게 전송된 메시지가 소비자가 독점적으로 취득하는 것입니다. 소비자가 메시지 수신을 승인하면 브로커는 큐에서 메시지를 제거합니다.
일반 사용 동작 대신, 비차별 사용을 강제 적용하도록 대기열을 구성할 수 있습니다. 이 경우 큐가 소비자에게 메시지를 보낼 때 다른 소비자가 메시지를 계속 수신할 수 있습니다. 또한 메시지는 소비자가 사용한 경우에도 큐에 남아 있습니다. 이러한 무차별 사용 동작을 적용하면 소비자는 큐 브라우저 라고 합니다.
비차별 사용을 강제 적용하는 것은 대기열이 특정 마지막 값 키의 최신 값을 항상 보유하고 있는지 확인하기 때문에 마지막 값 큐에 유용한 구성입니다.
다음 절차에서는 마지막 값 큐에 대해 비 결정적인 소비를 적용하는 방법을 보여줍니다.
사전 요구 사항
마지막-값 대기열을 개별적으로 구성했거나 주소 또는 주소 집합 과 연결된 모든 큐에 대해 이미 구성하셨습니다. 자세한 내용은 다음을 참조하십시오.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 이전에 대기열을 마지막 값 큐로 개별적으로 구성한 경우 디
지드되지 않은 키를
추가합니다. 값을true
로 설정합니다. 예를 들면 다음과 같습니다.<address name="my.address"> <multicast> <queue name="orders1" last-value-key="stock_ticker" non-destructive="true" /> </multicast> </address>
이전에 마지막 값 큐에 대한 주소 또는 주소 집합을 구성한 경우
default-non-destructive
키를 추가합니다. 값을true
로 설정합니다. 예를 들면 다음과 같습니다.<address-setting match="lastValue"> <default-last-value-key>stock_ticker </default-last-value-key> <default-non-destructive>true</default-non-destructive> </address-setting>
참고기본적으로
default-non-destructive
의 값은false
입니다.