From 933024c1793d28c04336d1a502169acc45e5ae4a Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Mon, 8 Apr 2019 13:37:18 -0400 Subject: [PATCH] GH-239: Doc how to use existing queue/exchange Resolves https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit/issues/239 --- docs/src/main/asciidoc/overview.adoc | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/src/main/asciidoc/overview.adoc b/docs/src/main/asciidoc/overview.adoc index 29dbf53bf..827fcb895 100644 --- a/docs/src/main/asciidoc/overview.adoc +++ b/docs/src/main/asciidoc/overview.adoc @@ -565,6 +565,35 @@ Default: `no limit` NOTE: In the case of RabbitMQ, content type headers can be set by external applications. Spring Cloud Stream supports them as part of an extended internal protocol used for any type of transport -- including transports, such as Kafka (prior to 0.11), that do not natively support headers. +== Using Existing Queues/Exchanges + +By default, the binder will automatically provision a topic exchange with the name being derived from the value of the destination binding property ``. +The destination defaults to the binding name, if not provided. +When binding a consumer, a queue will automatically be provisioned with the name `.` (if a `group` binding property is specified), or an anonymous, auto-delete queue when there is no `group`. +The queue will be bound to the exchange with the "match-all" wildcard routing key (`#`) for a non-partitioned binding or `-` for a partitioned binding. +The prefix is an empty `String` by default. +If an output binding is specified with `requiredGroups`, a queue/binding will be provisioned for each group. + +There are a number of rabbit-specific binding properties that allow you to modify this default behavior. + +If you have an existing exchange/queue that you wish to use, you can completely disable automatic provisioning as follows, assuming the exchange is named `myExchange` and the queue is named `myQueue`: + +* `spring.cloud.stream.binding..destination=myExhange` +* `spring.cloud.stream.binding..group=myQueue` +* `spring.cloud.stream.rabbit.bindings..consumer.bindQueue=false` +* `spring.cloud.stream.rabbit.bindings..consumer.declareExchange=false` +* `spring.cloud.stream.rabbit.bindings..consumer.queueNameGroupOnly=true` + +If you want the binder to provision the queue/exchange, but you want to do it using something other than the defaults discussed here, use the following properties. +Refer to the property documentation above for more information. + +* `spring.cloud.stream.rabbit.bindings..consumer.bindingRoutingKey=myRoutingKey` +* `spring.cloud.stream.rabbit.bindings..consumer.exchangeType=` + +* `spring.cloud.stream.rabbit.bindings..producer.routingKeyExpression='myRoutingKey'` + +There are similar properties used when declaring a dead-letter exchange/queue, when `autoBindDlq` is `true`. + == Retry With the RabbitMQ Binder When retry is enabled within the binder, the listener container thread is suspended for any back off periods that are configured.