RabbitTopologyConfig.java
package com.example.messaging.messaging;
import java.util.Map;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Declarables;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitTopologyConfig {
public static final String EVENTS_EXCHANGE = "events.x";
public static final String EVENTS_ROUTING_KEY = "events.msg";
public static final String EVENTS_QUEUE = "events.q";
public static final String DLX_EXCHANGE = "events.dlx";
public static final String DLQ_ROUTING_KEY = "events.msg.dlq";
public static final String DLQ_QUEUE = "events.dlq";
@Bean
public Declarables rabbitDeclarables() {
DirectExchange eventsExchange = new DirectExchange(EVENTS_EXCHANGE, true, false);
DirectExchange dlxExchange = new DirectExchange(DLX_EXCHANGE, true, false);
Queue mainQueue = new Queue(
EVENTS_QUEUE,
true,
false,
false,
Map.of(
"x-dead-letter-exchange", DLX_EXCHANGE,
"x-dead-letter-routing-key", DLQ_ROUTING_KEY
)
);
Queue dlqQueue = new Queue(DLQ_QUEUE, true);
Binding mainBinding = BindingBuilder.bind(mainQueue).to(eventsExchange).with(EVENTS_ROUTING_KEY);
Binding dlqBinding = BindingBuilder.bind(dlqQueue).to(dlxExchange).with(DLQ_ROUTING_KEY);
return new Declarables(eventsExchange, dlxExchange, mainQueue, dlqQueue, mainBinding, dlqBinding);
}
}