4.13. 미전송되지 않은 메시지를 배달 못 한 편지 주소로 이동
클라이언트에 메시지 전달이 실패하면 브로커가 메시지를 지속적으로 전달하려고 시도하지 않을 수 있습니다. 무한한 전달 시도를 방지하기 위해, dead letter 주소와 하나 이상의 상승된 dead letter 큐 를 정의할 수 있습니다. 지정된 수의 전송 시도 후 브로커는 원래 큐에서 전달되지 않은 메시지를 제거하고 구성된 dead letter 주소로 메시지를 보냅니다. 나중에 시스템 관리자는 배달 못 한 편지 대기열에서 전달되지 않은 메시지를 사용하여 메시지를 검사할 수 있습니다.
지정된 큐에 대해 배달 못 한 주소를 구성하지 않으면 브로커는 지정된 전달 시도 횟수 후에 큐에서 전달되지 않은 메시지를 영구적으로 제거합니다.
배달되지 않은 메시지는 dead letter 큐에서 소비되는 다음과 같은 속성을 갖습니다.
_AMQ_ORIG_ADDRESS
- 메시지의 원래 주소를 지정하는 string 속성
_AMQ_ORIG_QUEUE
- 메시지의 원래 큐를 지정하는 string 속성
4.13.1. 배달 못 한 문자 주소 구성
다음 절차에서는 dead letter 주소 및 관련 dead letter 큐를 구성하는 방법을 보여줍니다.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 큐 이름과 일치하는 <
address-setting
> 요소에서 dead letter address name 및 최대 전달 시도 수를 설정합니다. 예를 들면 다음과 같습니다.<configuration ...> <core ...> ... <address-settings> ... <address-setting match="exampleQueue"> <dead-letter-address>DLA</dead-letter-address> <max-delivery-attempts>3</max-delivery-attempts> </address-setting> ... <address-settings> <configuration ...>
match
-
브로커가 이
address-setting
섹션의 구성을 적용하는 주소입니다. <address-setting
> 요소의match
속성에 와일드카드 표현식을 지정할 수 있습니다. 와일드카드 표현식을 사용하면 <address-setting
> 요소에서 구성된 dead letter 설정을 일치하는 주소 세트 와 연결하려는 경우 유용합니다. dead-letter-address
- dead letter 주소의 이름입니다. 이 예제에서 브로커는 큐 예제Queue 에서 전달되지 않은 메시지를 dead letter 주소 DLA 로 이동합니다.
max-delivery-attempts
-
브로커가 구성된 배달되지 않은 메시지를 구성된 dead letter 주소로 이동하기 전에 최대 전달 시도 횟수입니다. 이 예에서 브로커는 실패한 전달 시도에 세 번 실패한 후 배달되지 않은 메시지를 배달 못 한 편지 주소로 이동합니다. 기본값은
10
입니다. 브로커가 무제한의 재전송 시도 횟수를 만들려면 값-1
을 지정합니다.
addresses
섹션에서 dead letter 주소에 대한address
요소 DLA 를 추가합니다. 배달 못 한 큐를 배달 못 한 편지 주소와 연결하려면큐
의 이름 값을 지정합니다. 예를 들면 다음과 같습니다.<configuration ...> <core ...> ... <addresses> <address name="DLA"> <anycast> <queue name="DLQ" /> </anycast> </address> ... </addresses> </core> </configuration>
앞의 구성에서 DLQ 라는 dead letter 큐를 dead letter address DLA 와 연결합니다.
추가 리소스
- 주소 설정에서 와일드카드를 사용하는 방법에 대한 자세한 내용은 4.2절. “주소 집합에 주소 설정 적용” 을 참조하십시오.
4.13.2. 배달 못 한 문자 대기열 자동 생성
일반적인 사용 사례는 원래 주소에 따라 전달되지 않은 메시지를 분류하는 것입니다. 예를 들어,
줄임말 큐로 전달되지 않은 메시지를 라우팅하도록 선택할 수 있습니다. 마찬가지로 orders라는 주소에서 전달되지 않은 메시지를 스톡
이라는 주소에서 DLQ
.products라고 하는 dead letter 큐가 있는 DLA.DLA.
라는 dead letter 주소로 라우팅할 수 있습니다.
orders
이러한 유형의 라우팅 패턴을 사용하면 전달되지 않은 메시지를 쉽게 추적, 검사 및 관리할 수 있습니다. 그러나 이와 같은 패턴은 자동으로 생성된 주소 및 큐를 주로 사용하는 환경에서 구현하기 어렵습니다. 이러한 유형의 환경에 대한 시스템 관리자는 전달되지 않은 메시지를 유지하기 위해 주소 및 대기열을 수동으로 생성하는 데 필요한 추가 노력을 원하지 않을 수 있습니다.
해결 방법으로 다음 절차에 표시된 것처럼 주소 및 큐를 자동으로 생성하여 전달되지 않은 메시지를 처리하도록 브로커를 구성할 수 있습니다.
사전 요구 사항
- 대기열 또는 큐 집합에 대해 이미 배달 못 한 주소를 구성했습니다. 자세한 내용은 4.13.1절. “배달 못 한 문자 주소 구성”의 내용을 참조하십시오.
절차
-
<
;broker_instance_dir> /etc/broker.xml
구성 파일을 엽니다. 일치하는 큐 또는 큐 집합에 대한 dead letter
주소를 정의하기 위해 이전에 추가한 <address-setting
> 요소를 찾습니다. 예를 들면 다음과 같습니다.<configuration ...> <core ...> ... <address-settings> ... <address-setting match="exampleQueue"> <dead-letter-address>DLA</dead-letter-address> <max-delivery-attempts>3</max-delivery-attempts> </address-setting> ... <address-settings> <configuration ...>
<
address-setting
> 요소에서 브로커가 종료된 문자 리소스(즉, 주소 및 대기열) 및 이러한 리소스의 이름을 지정하는 방법을 자동으로 생성하도록 지시하는 구성 항목을 추가합니다. 예를 들면 다음과 같습니다.<configuration ...> <core ...> ... <address-settings> ... <address-setting match="exampleQueue"> <dead-letter-address>DLA</dead-letter-address> <max-delivery-attempts>3</max-delivery-attempts> <auto-create-dead-letter-resources>true</auto-create-dead-letter-resources> <dead-letter-queue-prefix>DLQ.</dead-letter-queue-prefix> <dead-letter-queue-suffix></dead-letter-queue-suffix> </address-setting> ... <address-settings> <configuration ...>
auto-create-dead-letter-resources
브로커가 배달되지 않은 메시지를 수신하기 위해 배달 못 한 주소와 큐를 자동으로 생성하는지 여부를 지정합니다. 기본값은
false
입니다.auto-create-dead-letter-resources
가true
로 설정된 경우 브로커는 배달 못 한주소와
연관된 dead letter 큐를 정의하는 <address> 요소를 자동으로 생성합니다. 자동 생성 된 <address
> 요소의 이름은 <dead-letter-address>에 대해 지정한 name 값과 일치합니다
.브로커가 자동으로 생성된 <
address
> 요소에 정의하는 dead letter 큐는멀티캐스트
라우팅 유형이 있습니다. 기본적으로 브로커는 배달되지 않은 메시지의 원래 주소와 일치하도록 dead letter 큐의 이름을 지정합니다(예: 스포지트
).브로커는
_AMQ_ORIG_ADDRESS
속성을 사용하는 dead letter 큐에 대한 필터도 정의합니다. 이 필터는 배달 못 한 큐가 해당 원래 주소로 전송된 메시지만 수신하도록 합니다.dead-letter-queue-prefix
브로커가 자동으로 생성된 dead letter 큐의 이름에 적용되는 접두사입니다. 기본값은
DLQ입니다.
접두사 값을 정의하거나 기본값을 유지하는 경우 dead letter 큐의 이름은 접두사와 원래 주소(예:
DLQ.>-<s
)의 연결입니다.dead-letter-queue-suffix
- 브로커가 자동 생성된 dead letter 큐에 적용되는 접미사입니다. 기본값은 정의되지 않습니다(즉 브로커는 접미사를 적용하지 않음).