4.12. 만료된 메시지를 만료 주소로 이동
마지막 값 큐 이외의 큐의 경우 파괴적이지 않은 소비자만 있는 경우 브로커는 대기열에서 메시지를 삭제하지 않으므로 큐 크기가 시간이 지남에 따라 증가합니다. 큐 크기가 제한되지 않은 이러한 증가를 방지하려면 메시지가 만료되는 시기를 구성하고 브로커가 만료된 메시지를 이동하는 주소를 지정할 수 있습니다.
4.12.1. 메시지 만료 구성
다음 절차에서는 메시지 만료를 구성하는 방법을 보여줍니다.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. core
요소에서message-expiry-scan-period
를 설정하여 브로커가 만료된 메시지를 검색하는 빈도를 지정합니다.<configuration ...> <core ...> ... <message-expiry-scan-period>1000</message-expiry-scan-period> ...
이전 구성을 기반으로 브로커는 1000 밀리초마다 만료된 메시지의 대기열을 검색합니다.
일치하는 주소 또는 주소 집합에 대한
address-setting
요소에서 만료 주소를 지정합니다. 또한 메시지 만료 시간을 설정합니다. 예를 들면 다음과 같습니다.<configuration ...> <core ...> ... <address-settings> ... <address-setting match="stocks"> ... <expiry-address>ExpiryAddress</expiry-address> <expiry-delay>10</expiry-delay> ... </address-setting> ... <address-settings> <configuration ...>
expiry-address
-
일치하는 주소 또는 주소에 대한 만료 주소입니다. 이전 예에서 브로커는
주식
주소에 대한 만료된 메시지를ExpiryAddress
라는 만료 주소로 보냅니다. expiry-delay
브로커가 기본 만료 시간을 사용하는 메시지에 적용되는 만료 시간(밀리초)입니다. 기본적으로 메시지에는 만료 시간이
0
이며 이는 만료되지 않습니다. 만료 시간이 기본값보다 큰 메시지의 경우 expiration-delay
는 적용되지 않습니다.예를 들어 이전 예제와 같이 주소에
expiry-delay
를10
으로 설정했다고 가정합니다. 기본 만료 시간이0
인 메시지가 이 주소의 큐에 도달하는 경우 브로커는 메시지의 만료 시간을0
에서10
으로 변경합니다. 그러나 만료 시간20
을 사용하는 다른 메시지가 도달하는 경우 만료 시간은 변경되지 않습니다. expiry-delay를-1
로 설정하면 이 기능이 비활성화됩니다. 기본적으로expiry-delay
는-1
로 설정됩니다.
또는
expiry-delay
의 값을 지정하는 대신 최소 및 최대 만료 지연 값을 지정할 수 있습니다. 예를 들면 다음과 같습니다.<configuration ...> <core ...> ... <address-settings> ... <address-setting match="stocks"> ... <expiry-address>ExpiryAddress</expiry-address> <min-expiry-delay>10</min-expiry-delay> <max-expiry-delay>100</max-expiry-delay> ... </address-setting> ... <address-settings> <configuration ...>
min-expiry-delay
- 브로커가 메시지에 적용되는 최소 만료 시간(밀리초)입니다.
max-expiry-delay
브로커가 메시지에 적용되는 최대 만료 시간(밀리초)입니다.
브로커는 다음과 같이
min-expiry-delay
및max-expiry-delay
값을 적용합니다.-
기본 만료 시간이
0
인 메시지의 경우 브로커는 만료 시간을max-expiry-delay
의 지정된 값으로 설정합니다.max-expiry-delay
의 값을 지정하지 않은 경우 브로커는 만료 시간을min-expiry-delay
의 지정된 값으로 설정합니다.min-expiry-delay
에 대한 값을 지정하지 않은 경우 브로커는 메시지의 만료 시간을 변경하지 않습니다. -
max-expiry-delay
이상의 만료 시간이 있는 메시지의 경우 브로커는 만료 시간을max-expiry-delay
의 지정된 값으로 설정합니다. -
min-expiry-delay
의 값보다 낮은 메시지의 경우 브로커는 만료 시간을min-expiry-delay
의 지정된 값으로 설정합니다. -
min-expiry-delay
값과max-expiry-delay
사이의 만료가 있는 메시지의 경우 브로커는 메시지의 만료 시간을 변경하지 않습니다. -
expiry-delay
(즉, 기본값-1
이외의 값)에 대한 값을 지정하면min-expiry-delay
및max-expiry-delay
에 대해 지정하는 모든 값을 덮어씁니다. -
min-expiry-delay
및max-expiry-delay
의 기본값은-1
(즉, 비활성화됨)입니다.
-
기본 만료 시간이
구성 파일의 address 요소에서 이전에
expiry-address
에 지정된 주소를 구성합니다.이 주소에 큐를 정의합니다. 예를 들면 다음과 같습니다.
<addresses> ... <address name="ExpiryAddress"> <anycast> <queue name="ExpiryQueue"/> </anycast> </address> ... </addresses>
이전 예제 구성은 만료 큐인
ExpiryQueue
를 만료 주소인ExpiryAddress
와 연결합니다.
4.12.2. 만료 리소스 자동 생성
일반적인 사용 사례는 원래 주소에 따라 만료된 메시지를 분리하는 것입니다. 예를 들어 주식
이라는 주소에서 만료된 메시지를 EXP.stocks
라는 만료 큐로 라우팅하도록 선택할 수 있습니다. 마찬가지로 주문이라는 주소에서 만료된 메시지를 EXP.
라는 만료 큐로 라우팅할 수 있습니다.
orders
이러한 유형의 라우팅 패턴을 사용하면 만료된 메시지를 쉽게 추적, 검사 및 관리할 수 있습니다. 그러나 이러한 패턴은 주로 자동으로 생성된 주소와 큐를 사용하는 환경에서 구현하기 어렵습니다. 이러한 유형의 환경에서는 관리자가 만료된 메시지를 유지하기 위해 주소와 큐를 수동으로 생성하는 데 필요한 추가 노력을 기울이지 않습니다.
해결 방법으로 지정된 주소 또는 주소 집합에 대해 만료된 메시지를 처리하기 위해 자동으로 리소스(즉, 주소 및 대기열)를 생성하도록 브로커를 구성할 수 있습니다. 다음 절차에서는 예제를 보여줍니다.
사전 요구 사항
- 지정된 주소 또는 주소 집합에 대한 만료 주소를 이미 구성했습니다. 자세한 내용은 4.12.1절. “메시지 만료 구성”의 내용을 참조하십시오.
프로세스
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 이전에 구성 파일에 추가한 &
lt;address-setting
> 요소를 찾아 일치하는 주소 또는 주소 집합에 대한 만료 주소를 정의합니다. 예를 들면 다음과 같습니다.<configuration ...> <core ...> ... <address-settings> ... <address-setting match="stocks"> ... <expiry-address>ExpiryAddress</expiry-address> ... </address-setting> ... <address-settings> <configuration ...>
<
address-setting
> 요소에서 브로커에 만료 리소스(즉, 주소 및 큐)를 자동으로 생성하도록 지시하는 구성 항목과 이러한 리소스의 이름을 지정하는 방법을 추가합니다. 예를 들면 다음과 같습니다.<configuration ...> <core ...> ... <address-settings> ... <address-setting match="stocks"> ... <expiry-address>ExpiryAddress</expiry-address> <auto-create-expiry-resources>true</auto-create-expiry-resources> <expiry-queue-prefix>EXP.</expiry-queue-prefix> <expiry-queue-suffix></expiry-queue-suffix> ... </address-setting> ... <address-settings> <configuration ...>
auto-create-expiry-resources
브로커가 만료된 메시지를 수신하기 위해 만료 주소와 큐를 자동으로 생성하는지 여부를 지정합니다. 기본값은
false
입니다.매개변수 값이
true
로 설정되면 브로커는 만료주소
및 관련 만료 큐를 정의하는 <address> 요소를 자동으로 생성합니다. 자동으로 생성된 <address> 요소의 name
값은 에<expiry-address>
지정된 name 값과 일치합니다.자동으로 생성된 만료 큐에는
멀티캐스트
라우팅 유형이 있습니다. 기본적으로 브로커는 만료된 메시지가 원래 전송된 주소와 일치하도록 만료 큐의 이름을 지정합니다 (예:주식
).브로커는
_AMQ_ORIG_ADDRESS
속성을 사용하는 만료 대기열에 대한 필터도 정의합니다. 이 필터를 사용하면 만료 큐가 해당 원래 주소로 전송된 메시지만 수신합니다.expiry-queue-prefix
브로커가 자동으로 생성된 만료 큐의 이름에 적용되는 접두사입니다. 기본값은
EXP입니다.
접두사 값을 정의하거나 기본값을 유지하는 경우 만료 큐의 이름은 접두사 및 원래 주소(예:
EXP.stocks
)입니다.expiry-queue-suffix
- 브로커가 자동으로 생성된 만료 대기열 이름에 적용되는 접미사입니다. 기본값은 정의되지 않습니다(즉, 브로커는 접미사를 적용하지 않음).
자체적으로 큐 이름(예: AMQ Broker Core Protocol JMS 클라이언트를 사용하는 경우) 또는 정규화된 큐 이름(예: 다른 JMS 클라이언트를 사용하는 경우)을 사용하여 만료 대기열에 직접 액세스할 수 있습니다.
만료 주소 및 큐가 자동으로 생성되므로 자동으로 생성된 주소 및 큐 삭제와 관련된 주소 설정이 이러한 만료 리소스에도 적용됩니다.
추가 리소스
- 자동으로 생성된 주소 및 큐의 자동 삭제를 구성하는 데 사용되는 주소 설정에 대한 자세한 내용은 4.8.2절. “주소 및 큐의 자동 생성 및 삭제 구성” 을 참조하십시오.