整合所有內容

以下組態建立一個名為 myDestination 的交換器,以及一個名為 myDestination.consumerGroup 的佇列,該佇列綁定到一個主題交換器,其萬用字元路由鍵為 #

---
spring.cloud.stream.bindings.input.destination=myDestination
spring.cloud.stream.bindings.input.group=consumerGroup
#disable binder retries
spring.cloud.stream.bindings.input.consumer.max-attempts=1
#dlx/dlq setup
spring.cloud.stream.rabbit.bindings.input.consumer.auto-bind-dlq=true
spring.cloud.stream.rabbit.bindings.input.consumer.dlq-ttl=5000
spring.cloud.stream.rabbit.bindings.input.consumer.dlq-dead-letter-exchange=
---

此組態建立一個 DLQ,綁定到一個直接交換器 (DLX),其路由鍵為 myDestination.consumerGroup。當訊息被拒絕時,它們會被路由到 DLQ。5 秒後,訊息過期,並使用佇列名稱作為路由鍵路由回原始佇列,如下例所示

Spring Boot 應用程式
@SpringBootApplication
public class XDeathApplication {

    public static void main(String[] args) {
        SpringApplication.run(XDeathApplication.class, args);
    }

    @Bean
    public Consumer<Message<String>> listen() {
        return message -> {
            Map<?,?> death = message.getHeaders().get("x-death");
            if (death != null && death.get("count").equals(3L)) {
                // giving up - don't send to DLX
                throw new ImmediateAcknowledgeAmqpException("Failed after 4 attempts");
            }
            throw new AmqpRejectAndDontRequeueException("failed");
        };
    }

}

請注意,x-death 標頭中的 count 屬性是一個 Long