接続設定
spring:
rabbitmq:
host: rabbitmq-server
port: 5672
username: admin
password: securepass
connection-timeout: 15000
virtual-host: /
requested-heartbeat: 60
publisher-confirms: true
publisher-returns: true
リスナー設定
spring:
rabbitmq:
listener:
simple:
prefetch: 1
concurrency: 1
max-concurrency: 10
acknowledge-mode: manual
retry:
enabled: true
max-attempts: 5
max-interval: 10s
initial-interval: 2s
multiplier: 2
stateless: true
テンプレート設定
spring:
rabbitmq:
template:
mandatory: true
receive-timeout: 3000
reply-timeout: 5000
retry:
enabled: true
max-attempts: 3
initial-interval: 1s
multiplier: 1.5
max-interval: 5s
依存関係の追加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
メッセージ送信
rabbitTemplate.convertAndSend("exchange_name", "routing_key", messageData);
メッセージ処理
@RabbitListener(queues = "queue_name")
public void processMessage(String messageContent,
Channel channel,
@Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {
try {
// メッセージ処理ロジック
channel.basicAck(deliveryTag, false);
} catch (Exception e) {
channel.basicNack(deliveryTag, false, true);
}
}
Bean設定によるキュー定義
@Configuration
public class RabbitMQConfig {
@Bean
public DirectExchange customExchange() {
return new DirectExchange("custom_exchange", true, false);
}
@Bean
public Queue customQueue() {
return new Queue("custom_queue", true, false, false);
}
@Bean
public Binding customBinding() {
return BindingBuilder.bind(customQueue())
.to(customExchange())
.with("custom_key");
}
}