Spring Cloud Stream DLQ, производитель и потребитель, находящиеся под несколькими приложениями - PullRequest
0 голосов
/ 30 мая 2019

У меня есть производитель, скажем, Приложение A со следующей конфигурацией,

Свойства производителя:

spring.cloud.stream.bindings.packageVersionUpdatesPublishChannel.destination=fabric-exchange
    spring.cloud.stream.bindings.packageVersionUpdatesPublishChannel.producer.requiredGroups=version-updates
    spring.cloud.stream.rabbit.bindings.packageVersionUpdatesPublishChannel.producer.exchangeType=direct
    spring.cloud.stream.rabbit.bindings.packageVersionUpdatesPublishChannel.producer.routingKeyExpression='package-version'
    spring.cloud.stream.rabbit.bindings.packageVersionUpdatesPublishChannel.producer.bindingRoutingKey=package-version

И у меня есть Потребитель для той же очереди в другом приложении, скажем, B,

#Consumer Properties:
spring.cloud.stream.bindings.packageVersionUpdatesConsumerChannel.destination=fabric-exchange
spring.cloud.stream.bindings.packageVersionUpdatesConsumerChannel.group=package-version-updates
spring.cloud.stream.bindings.packageVersionUpdatesConsumerChannel.consumer.max-attempts=1
spring.cloud.stream.rabbit.bindings.packageVersionUpdatesConsumerChannel.consumer.exchangeType=direct
spring.cloud.stream.rabbit.bindings.packageVersionUpdatesConsumerChannel.consumer.durableSubscription=true
spring.cloud.stream.rabbit.bindings.packageVersionUpdatesConsumerChannel.consumer.bindingRoutingKey=package-version
#DLQ
spring.cloud.stream.rabbit.bindings.packageVersionUpdatesConsumerChannel.consumer.autoBindDlq=true
spring.cloud.stream.rabbit.bindings.packageVersionUpdatesConsumerChannel.consumer.dlqDeadLetterExchange=
spring.cloud.stream.rabbit.bindings.packageVersionUpdatesConsumerChannel.consumer.dlq-ttl=30000
#Error Exchange Creation and Bind the Same to Error Queue
spring.cloud.stream.bindings.packageVersionUpdatesErrorPublishChannel.destination=fabric-error-exchange
spring.cloud.stream.bindings.packageVersionUpdatesErrorPublishChannel.producer.requiredGroups=package-version-updates-error
spring.cloud.stream.rabbit.bindings.packageVersionUpdatesErrorPublishChannel.producer.exchangeType=direct
spring.cloud.stream.rabbit.bindings.packageVersionUpdatesErrorPublishChannel.producer.routingKeyExpression='packageversionupdateserror'
spring.cloud.stream.rabbit.bindings.packageVersionUpdatesErrorPublishChannel.producer.bindingRoutingKey=packageversionupdateserror

Теперь, например, скажите, что если приложение А загружается первым, то обновления версии очереди будут созданы без какой-либо очереди недоставленных сообщений.

И теперь, когда приложение B запускается, это исключение, которое я получаю, и канал становится shudtdown, я думаю, это потому, что приложение B пытается воссоздать очередь с другой конфигурацией

неэквивалентный аргумент 'x-dead-letter-exchange' для очереди 'fabric-exchange.version-updates' в vhost '/': получил значение 'DLX' типа 'longstr', но текущий - нет

Может кто-нибудь, пожалуйста, дайте мне знать, как мне решить эту проблему, где мое требование состоит в том, чтобы создать очередь в приложении A, а приложение-A просто выдаст сообщения в эту очередь

И App-B будет использовать то же самое, и мое требование - поддерживать повторные попытки через X промежуток времени через DLQ

1 Ответ

0 голосов
/ 30 мая 2019

required-groups - это просто удобство для обеспечения очереди потребителя при запуске производителя, чтобы избежать потери сообщений, если производитель запускается первым.

Вы должны использовать одинаковую конфигурацию обмена / очереди / привязки с обеих сторон.

...