Spring Cloud Stream отложил создание Exchange через настройку - PullRequest
0 голосов
/ 04 марта 2019

У меня есть сценарий использования, когда сообщения должны быть обработаны с определенной задержкой, а также требуется ввести экспоненциальный откат между повторными попытками, упомянутое в документации приложение ReRouteDlqApplication точно соответствует моей цели.

https://cloud.spring.io/spring-cloud-static/Finchley.SR1/multi/multi__rabbitmq_binder.html

Единственная дополнительная информация, которая мне нужна, это возможность настроить delayedExchange также через application.properties и связать его с исходными очередями вместо того, чтобы делать то же самое через Beans, чтобы не было необходимости дублировать логикучерез несколько обработчиков ошибок (т. е. один обработчик ошибок на один DLQ)

Plz, дайте мне знать, если потребуется дополнительная информация.

Редактировать:

Согласно комментариямполучил, я удалил все обмены и очереди и затем попытался заново локально, но все еще сталкиваюсь с ошибкой ниже Ошибка: "получено" x-delayed-message ", но текущая тема" тема ""

Файл моих свойств:

spring.cloud.stream.bindings.packagingConsumerChannel.destination=fabric-exchange
spring.cloud.stream.bindings.packagingConsumerChannel.group=package-queue
spring.cloud.stream.bindings.packagingConsumerChannel.consumer.max-attempts=1
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.durableSubscription=true
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.bindingRoutingKey=package
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.autoBindDlq=true
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.dlqDeadLetterExchange=
spring.cloud.stream.rabbit.bindings.packagingConsumerChannel.consumer.delayedExchange=true

1 Ответ

0 голосов
/ 04 марта 2019

Установите для свойства привязки потребителя delayedExchange значение true.

Коммит был добавлен в версии 1.2 .

РЕДАКТИРОВАТЬ

@SpringBootApplication
@EnableBinding(Sink.class)
public class So54986375Application {

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

    @StreamListener(Sink.INPUT)
    public void listen(String in) {

    }

}

и

spring.cloud.stream.rabbit.bindings.input.consumer.delayedExchange=true

и

enter image description here

...