Пользовательские опции DLX в переплете rabbitmq - PullRequest
0 голосов
/ 17 сентября 2018

Я использую Spring-Cloud-Stream для связи между микросервисами. У меня есть следующие предустановленные настройки в брокере Rabbit MQ.

"first" -> exchange of type Topic which is bound to Queue (name="user.create",x-dead-letter-exchange="first.dlx")
"first.dlx" -> dead letter exchange of type Topic

и следующий файл конфигурации:

spring:
    cloud:
        stream:
            bindings:
                consumer-input:
                  group: user.create
                  destination: first
                  contentType: application/json
                  binder: rabbit
            binders:
                rabbit:
                  type: rabbit
            rabbit:
                bindings:
                  consumer-input:
                    consumer:
                      acknowledgeMode: manual
                      declareExchange: false
                      queueNameGroupOnly: true 
                      bindQueue: false
                      deadLetterExchange: first.dlx
                      autoBindDlq: true
                      deadLetterRoutingKey: user.create.dlq

и при запуске приложение говорит:

[AMQP Connection 127.0.0.1:5672] ERROR o.s.a.r.c.CachingConnectionFactory - Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - inequivalent arg 'type' for exchange 'first.dlx' in vhost '/': received 'direct' but current is 'topic', class-id=40, method-id=10)

потому что кролик mq пытается объявить dlx типа "direct". Вот ссылка на репо .

поэтому мой вопрос ... есть ли способ сказать кролику mq объявить dlx другого типа, кроме "direct", например, имя свойства: "deadLetterExchangeType: topic"? или вообще не объявлять dlx.

Любое другое предложение будет очень полезным.

1 Ответ

0 голосов
/ 17 сентября 2018

В настоящее время невозможно определить тип обмена DLX или предотвратить его объявление.Пожалуйста, откройте проблему для связывателя .

Простого разрешения указания типа может быть недостаточно, поскольку у него могут быть другие несовместимые аргументы.Вероятно, мы должны добавить declareDlx, аналогично declareExchange.

...