知識マップ: MSMQはいつまで使えるのか ── 「非推奨ですらない」レガシーキューの移行判断
記事「MSMQはいつまで使えるのか ── 「非推奨ですらない」レガシーキューの移行判断」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
MSMQはOS機能としては2026年7月時点でも非推奨になっていませんが、これを扱う標準ライブラリSystem.Messagingは.NET Frameworkにしか存在せず、.NET(Core以降)への公式な道はありません。CoreWCFによる移植やネイティブAPIのP/Invokeは延命手段止まりで、新規採用も推奨できません。移行判断の軸は「アプリを.NETへ上げるか」で、上げるならMSMQ+DTCが担っていた整合性を、業務データと同一のローカルトランザクションで確定できるDBのテーブルキューに置き換えるのが第一候補です。複数システム間の疎結合な連携が必要な場合に限り、RabbitMQやAzure Service Busを検討します。テーブルキューの実装ではREADPASTヒントとREAD_COMMITTED_SNAPSHOTデータベースオプションの組み合わせに注意が要ります。
flowchart LR
accTitle: MSMQ移行判断の知識マップ
accDescr: MSMQがOS機能としては存続する一方System.Messagingが.NET Frameworkに閉じていること、CoreWCF.MSMQやネイティブAPIによる延命手段、DTCが移行の最難関になること、DBのテーブルキューがMSMQ+DTCの整合性を置き換える第一候補であること、RabbitMQ/Azure Service Busが向く要件、BinaryFormatterの扱い、READPASTとREAD_COMMITTED_SNAPSHOTの排他関係の関係を示す図
msmq["MSMQ(Microsoft Message Queuing)"]
system_messaging["System.Messaging"]
dtc["DTC(分散トランザクションコーディネーター)"]
transactional_queue["トランザクションキュー"]
express_message["expressメッセージ"]
recoverable_message["recoverable(回復可能)メッセージ"]
journal_queue["ジャーナルキュー"]
dead_letter_queue["配信不能(デッドレター)キュー"]
private_queue["プライベートキュー"]
message_loss_on_restart["再起動時のメッセージ喪失"]
dotnet_framework[".NET Framework"]
dotnet[".NET(Core以降)"]
windows_compat_pack["Windows互換パック"]
msmq_native_api["MSMQのWin32ネイティブAPI"]
corewcf["CoreWCF"]
table_queue["DBのテーブルキュー"]
rabbitmq["RabbitMQ"]
azure_service_bus["Azure Service Bus"]
multi_system_messaging["複数システム・複数言語間の疎結合な連携"]
binaryformatter["BinaryFormatter"]
outbox_pattern["Outboxパターン"]
readpast_hint["READPASTテーブルヒント"]
read_committed_snapshot["READ_COMMITTED_SNAPSHOTデータベースオプション"]
new_project_adoption["新規プロジェクトでの新規採用"]
msmq -.->|"利用する"| dtc
msmq -->|"利用する"| transactional_queue
msmq -->|"利用する"| express_message
msmq -->|"利用する"| recoverable_message
msmq -->|"利用する"| journal_queue
msmq -->|"利用する"| dead_letter_queue
msmq -.->|"利用する"| private_queue
express_message -.->|"原因になり得る"| message_loss_on_restart
recoverable_message -->|"防止する"| message_loss_on_restart
system_messaging -->|"前提とする"| dotnet_framework
system_messaging -->|"両立しない"| dotnet
windows_compat_pack -->|"両立しない"| system_messaging
dotnet -.->|"利用する"| msmq_native_api
msmq_native_api -->|"前提とする"| msmq
corewcf -->|"利用する"| system_messaging
table_queue -->|"の後継"| msmq
transactional_queue -.->|"前提とする"| dtc
table_queue -->|"推奨される対応"| dtc
dtc -->|"両立しない"| rabbitmq
dtc -->|"両立しない"| azure_service_bus
rabbitmq -.->|"推奨される対応"| multi_system_messaging
azure_service_bus -.->|"推奨される対応"| multi_system_messaging
table_queue -.->|"用いるのは非推奨"| multi_system_messaging
binaryformatter -->|"両立しない"| dotnet
table_queue -.->|"両立しない"| binaryformatter
table_queue -->|"利用する"| outbox_pattern
table_queue -->|"利用する"| readpast_hint
readpast_hint -->|"両立しない"| read_committed_snapshot
msmq -->|"用いるのは非推奨"| new_project_adoption
概念間の関係(全29件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- MSMQ(Microsoft Message Queuing)はDTC(分散トランザクションコーディネーター)を利用します。
- MSMQ(Microsoft Message Queuing)はトランザクションキューを利用します。
- MSMQ(Microsoft Message Queuing)はexpressメッセージを利用します。
- MSMQ(Microsoft Message Queuing)はrecoverable(回復可能)メッセージを利用します。
- MSMQ(Microsoft Message Queuing)はジャーナルキューを利用します。
- MSMQ(Microsoft Message Queuing)は配信不能(デッドレター)キューを利用します。
- MSMQ(Microsoft Message Queuing)はプライベートキューを利用します。
- expressメッセージは再起動時のメッセージ喪失の原因になることがあります。
- recoverable(回復可能)メッセージは再起動時のメッセージ喪失を防ぎます。
- System.Messagingは.NET Frameworkを前提とします。
- System.Messagingは.NET(Core以降)と両立しません。
- Windows互換パックはSystem.Messagingと両立しません。
- .NET(Core以降)はMSMQのWin32ネイティブAPIを利用します。
- MSMQのWin32ネイティブAPIはMSMQ(Microsoft Message Queuing)を前提とします。
- CoreWCFはSystem.Messagingを利用します。
- DBのテーブルキューはMSMQ(Microsoft Message Queuing)の後継に当たります。
- トランザクションキューはDTC(分散トランザクションコーディネーター)を前提とします。
- DBのテーブルキューはDTC(分散トランザクションコーディネーター)に対する本記事の推奨です。
- DTC(分散トランザクションコーディネーター)はRabbitMQと両立しません。
- DTC(分散トランザクションコーディネーター)はAzure Service Busと両立しません。
- RabbitMQは複数システム・複数言語間の疎結合な連携に対する本記事の推奨です。
- Azure Service Busは複数システム・複数言語間の疎結合な連携に対する本記事の推奨です。
- DBのテーブルキューを複数システム・複数言語間の疎結合な連携に用いることは推奨されません。
- BinaryFormatterは.NET(Core以降)と両立しません。
- DBのテーブルキューはBinaryFormatterと両立しません。
- DBのテーブルキューはOutboxパターンを利用します。
- DBのテーブルキューはREADPASTテーブルヒントを利用します。
- READPASTテーブルヒントはREAD_COMMITTED_SNAPSHOTデータベースオプションと両立しません。
- MSMQ(Microsoft Message Queuing)を新規プロジェクトでの新規採用に用いることは推奨されません。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。