知識マップ: 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データベースオプションの組み合わせに注意が要ります。

MSMQ移行判断の知識マップMSMQがOS機能としては存続する一方System.Messagingが.NET Frameworkに閉じていること、CoreWCF.MSMQやネイティブAPIによる延命手段、DTCが移行の最難関になること、DBのテーブルキューがMSMQ+DTCの整合性を置き換える第一候補であること、RabbitMQ/Azure Service Busが向く要件、BinaryFormatterの扱い、READPASTとREAD_COMMITTED_SNAPSHOTの排他関係の関係を示す図利用する利用する利用する利用する利用する利用する利用する原因になり得る防止する前提とする両立しない両立しない利用する前提とする利用するの後継前提とする推奨される対応両立しない両立しない推奨される対応推奨される対応用いるのは非推奨両立しない両立しない利用する利用する両立しない用いるのは非推奨MSMQ(Microsoft Message Queuing)System.MessagingDTC(分散トランザクションコーディネーター)トランザクションキューexpressメッセージrecoverable(回復可能)メッセージジャーナルキュー配信不能(デッドレター)キュープライベートキュー再起動時のメッセージ喪失.NET Framework.NET(Core以降)Windows互換パックMSMQのWin32ネイティブAPICoreWCFDBのテーブルキューRabbitMQAzure Service Bus複数システム・複数言語間の疎結合な連携BinaryFormatterOutboxパターンREADPASTテーブルヒントREAD_COMMITTED_SNAPSHOTデータベースオプション新規プロジェクトでの新規採用

概念間の関係(全29件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

MSMQ(Microsoft Message Queuing)
Windowsに同梱されてきたメッセージキュー基盤。store-and-forward・トランザクション・OS同梱を特徴とし、2026年7月時点で公式の非推奨機能一覧には載っていない。
System.Messaging
MSMQを扱う.NETの標準クラスライブラリ。対象バージョンは.NET Framework 1.1〜4.8.1のみで、.NET(Core以降)向けの版は存在しない。
expressメッセージ
MSMQの既定の送信モード。配送中も配送後もメモリ上に置かれ高速だが、MSMQサービスやマシンの再起動で失われる。
recoverable(回復可能)メッセージ
送信側と中継する各コンピューターでディスクに書かれ、宛先キューでもディスク上に保持されるMSMQの送信モード。再起動をまたいで残る。
Windows互換パック
.NET Framework専用APIへの依存を.NET移行時に補うため約2万のAPIを提供するパッケージ。技術領域一覧にメッセージング(System.Messaging)は含まれない。
.NET(Core以降)
.NET Framework の後継となるクロスプラットフォームのランタイム。System.Messagingの公式マネージドAPIが存在しない対象。
MSMQのWin32ネイティブAPI
MQSendMessage・MQReceiveMessageなど、MSMQをC/C++向けに操作する文書化されたWin32 API。.NETからP/Invokeで呼ぶことも可能だが、フォーマッターやトランザクション連携は自前で書く延命手段。
CoreWCF
WCFのサーバー側を.NETに移植するコミュニティ主導プロジェクト。マイクロソフトが公式なサポートポリシーを提供する一方、MSMQ対応パッケージ(CoreWCF.MSMQ)はSystem.Messagingのコミュニティ移植に依存する。
DBのテーブルキュー
データベースのテーブルをキューとして使う設計。メッセージの取り出しと業務データの更新を同一のローカルトランザクションで確定でき、MSMQ+DTCの整合性をより単純な仕組みで置き換えられる。
トランザクションキュー
トランザクションメッセージだけを扱うMSMQのキュー。作成時に決まり、後から変更できない。
DTC(分散トランザクションコーディネーター)
複数のリソース(MSMQのキューとデータベースなど)にまたがるトランザクションを調停するWindowsのサービス。クラウド系のキューサービスは参加できない。
RabbitMQ
オンプレミスで運用できるメッセージブローカー。複数システム・複数言語間の疎結合な連携やファンアウト配信が得意な一方、自前運用の冗長化・更新の負荷を伴う。
Azure Service Bus
クラウド上で運用できるメッセージブローカー。複数システム間の疎結合な連携に向くが、DTCには参加できない。
BinaryFormatter
セキュリティ上の理由から段階的に廃止された.NETのバイナリ直列化機構。.NET 9以降はランタイムから実装が削除され既定では使用できない。
READPASTテーブルヒント
他のトランザクションがロックしている行を読まずに飛ばすSQL Serverのテーブルヒント。複数ワーカーによるテーブルキューの並列な取り出しに使う。行ロックは飛ばせるがページロックは飛ばせない。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。