Source:
<code>public void doBindConsumer(String name, String group, MessageChannel inputChannel, Properties properties) { String baseQueueName = BinderUtils.groupedName(name, group); if (this.logger.isInfoEnabled()) { this.logger.info("declaring queue for inbound: " + baseQueueName + ", bound to: " + name); } RabbitPropertiesAccessor accessor = new RabbitPropertiesAccessor(properties); validateConsumerProperties(baseQueueName, properties, SUPPORTED_CONSUMER_PROPERTIES); String prefix = accessor.getPrefix(this.defaultPrefix); String exchangeName = applyPrefix(prefix, name); TopicExchange exchange = new TopicExchange(exchangeName); declareExchange(exchangeName, exchange); String queueName = applyPrefix(prefix, baseQueueName); int partitionIndex = accessor.getPartitionIndex(); String dlqNameRoot = baseQueueName; if (partitionIndex >= 0) { String partitionSuffix = "-" + partitionIndex; queueName += partitionSuffix; <START> dlqNameRoot += partitionSuffix; <END> } Queue queue; boolean durable = accessor.isDurable(this.defaultDurableSubscription); if (durable) { queue = new Queue(queueName, true, false, false, queueArgs(accessor, queueName)); } else { queue = new Queue(queueName, false, false, true); } declareQueue(queueName, queue); if (partitionIndex >= 0) { String bindingKey = String.format("%s-%d", name, partitionIndex); declareBinding(queue.getName(), BindingBuilder.bind(queue).to(exchange).with(bindingKey)); } else { declareBinding(queue.getName(), BindingBuilder.bind(queue).to(exchange).with("#")); } doRegisterConsumer(baseQueueName, inputChannel, queue, accessor); if (durable) { autoBindDLQ(dlqNameRoot, accessor); } }</code><technical_language>FYI, I [just fixed a bug in XD](<LINK_0> - there, DLQ for partitions, a DLQ for partition. a DLQ for partition a bit of overkill, get originating partition a header, especially a large number of partitions. necessarily for this PR, about, perhaps</technical_language>

Target:
public void doBindConsumer(String name, String group, MessageChannel inputChannel, Properties properties) { String baseQueueName = groupedName(name, group); if (this.logger.isInfoEnabled()) { this.logger.info("declaring queue for inbound: " + baseQueueName + ", bound to: " + name); } RabbitPropertiesAccessor accessor = new RabbitPropertiesAccessor(properties); validateConsumerProperties(baseQueueName, properties, SUPPORTED_CONSUMER_PROPERTIES); String prefix = accessor.getPrefix(this.defaultPrefix); String exchangeName = applyPrefix(prefix, name); TopicExchange exchange = new TopicExchange(exchangeName); declareExchange(exchangeName, exchange); String queueName = applyPrefix(prefix, baseQueueName); int partitionIndex = accessor.getPartitionIndex(); if (partitionIndex >= 0) { String partitionSuffix = "-" + partitionIndex; queueName += partitionSuffix; } Queue queue; boolean durable = accessor.isDurable(this.defaultDurableSubscription); if (durable) { queue = new Queue(queueName, true, false, false, queueArgs(accessor, queueName)); } else { queue = new Queue(queueName, false, false, true); } declareQueue(queueName, queue); if (partitionIndex >= 0) { String bindingKey = String.format("%s-%d", name, partitionIndex); declareBinding(queue.getName(), BindingBuilder.bind(queue).to(exchange).with(bindingKey)); } else { declareBinding(queue.getName(), BindingBuilder.bind(queue).to(exchange).with("#")); } doRegisterConsumer(baseQueueName, inputChannel, queue, accessor); if (durable) { autoBindDLQ(applyPrefix(prefix, baseQueueName), queueName, accessor); } }