Spring RabbitMQ
キュー構成パラメータ
| パラメータ名 | 説明 | Java 構成例 | ベストプラクティス |
|---|---|---|---|
durable | キューの永続性 。ディスクへの保存 を決定 します。 | new Queue("myQueue", true) | 実運用
では true を推奨
します。 |
exclusive | 排他性 。作成 した接続 のみに公開 。 | new Queue("myQueue", true, true, false) | 応答用 の一時的なキューに使用 。 |
autoDelete | 自動削除 。最後 のコンシューマーが離脱後 に削除 。 | new Queue("myQueue", true, false, true) | 一時的
なキューは true。 |
ignoreDeclarationExceptions | 宣言例外無視 。 | @RabbitListener(queuesToDeclare = @Queue(value = "q", ignoreDeclarationExceptions = "true")) | インフラとの柔軟 な接続用 。 |
x-queue-type | キューのタイプ(stream や classic)。 | QueueBuilder.durable("q").withArgument("x-queue-type", "stream") | 大規模な読
み取
りには stream。 |
x-dead-letter-exchange | デッドレター交換機 。 | QueueBuilder.durable("q").withArgument("x-dead-letter-exchange", "dlx") | エラー処理用 。 |
x-message-ttl | メッセージの有効期限 。 | QueueBuilder.durable("q").withArgument("x-message-ttl", 60000) | メッセージの滞留回避 。 |
交換機構成パラメータ
| パラメータ名 | 説明 | Java 構成例 | 使用 シーン |
|---|---|---|---|
durable | 交換機 の永続性 。 | new DirectExchange("ex", true, false) | 本番環境
では true。 |
autoDelete | 自動削除 。 | new DirectExchange("ex", true, true) | 一時的 な交換機 。 |
type | タイプ:direct, fanout, topic, headers。 | new TopicExchange("myTopic") | ルーティング要件 に応 じて。 |
delayed | 遅延交換機 。 | ExchangeBuilder.directExchange("ex").delayed().build() | 予約通知 など。 |
RabbitListener 注釈パラメータ
| パラメータ名 | 説明 | Java 構成例 |
|---|---|---|
queuesToDeclare | 必要 なキューの宣言 。 | @RabbitListener(queuesToDeclare = @Queue("name")) |
bindings | 交換機 、キュー、キーのバインディング。 | @RabbitListener(bindings = @QueueBinding(...)) |
ackMode | 確認 モード。 | @RabbitListener(queues = "q", ackMode = "MANUAL") |
concurrency | 並列実行数 。 | @RabbitListener(queues = "q", concurrency = "3-10") |
メッセージ保証レベル
| レベル | 説明 | 構成 のポイント | 使用 シーン |
|---|---|---|---|
| 最大 1回 | 紛失 の可能性 あり、重複 なし。 | ackMode=NONE | 速度を優先 。 |
| 最低 1回 | 紛失 なし、重複 の可能性 あり。 | ackMode=AUTO + 永続化 | 標準的 な業務 。 |
| 正確 に1回 | 紛失 も重複 もなし。 | 冪等性処理 + 事務 | 金融決済 。 |
実装
RabbitTemplate:メッセージの送受信 に使用。AmqpAdmin:キューや交換機 の管理 。MessageConverter:Java オブジェクトと JSON などの変換 。
図解
1対多
flowchart LR
EX[Exchange]
B1((Binding<br/>rk1))
B2((Binding<br/>rk2))
Q1[Queue1]
Q2[Queue2]
EX --> B1 --> Q1
EX --> B2 --> Q2
多対1
flowchart LR
EX1[Exchange1]
EX2[Exchange2]
B1((Binding))
B2((Binding))
Q1[Queue1]
EX1 --> B1 --> Q1
EX2 --> B2 --> Q1