【徹底解説】RabbitMQ のデータをSQL Server のリンクサーバーにノーコードで連携する方法

兵藤朋代
兵藤朋代
コンテンツスペシャリスト
業務で利用しているSQL Server にRabbitMQ のデータを統合したい方向けに、リンクサーバーを活用したアプローチを紹介。CData ODBC DriverのSQL Gateway 機能を使うことで3ステップ設定。使い慣れたSQL Server からRabbitMQ データに手軽にアクセスできるようになります。



本記事では、SQL ServerのTDS Remoting 機能を使ってRabbitMQ にリンクサーバーとしてシームレスに連携する方法を解説します。この連携には、CData ODBC Driverに同梱されているSQL Gateway を使用します。この方法により、SQL Server のインターフェースからRabbitMQ への読み書き双方向のアクセスが可能になり、既存のSQL Server 環境で外部データを活用できるようになります。スクリーンショット付きで紹介していくので、初心者の方でも簡単に設定できます!

RabbitMQ をSQL Server のリンクサーバーとして利用する3つの主要シナリオ

  • SQL Server に接続しているアプリケーションでRabbitMQ のデータを利用したいがデータ接続を増やしたくない
  • RabbitMQ のデータをSQL Server のデータや他のリンクサーバーのデータをJOIN などして使いたい
  • 利用したいミドルウェア・BI ツールなどにODBC やJDBC の汎用のインターフェースがないが、SQL Server には接続できる

【準備編】RabbitMQ ODBC DSNの設定方法

まずは、本記事右側のサイドバーからAPI ODBC Driver の無償トライアルをダウンロード・インストールしてください。ODBC ドライバーのインストール完了時にODBC DSN 設定画面が立ち上がります。または、Microsoft ODBC データソースアドミニストレーターを使ってDSN を作成および設定できます。

RabbitMQ Management HTTP API について

RabbitMQ は、複数のメッセージングプロトコルをサポートするオープンソースのメッセージブローカーです。RabbitMQ Management HTTP API は、RabbitMQ サーバーの管理データと監視データに HTTP 経由でアクセスする手段を提供します。この API では、仮想ホスト、エクスチェンジ、キュー、バインディング、コネクション、チャネル、コンシューマー、ユーザー、権限、ポリシー、クラスター全体の統計情報を取得できます。

HTTP API を利用するには、RabbitMQ サーバーで Management プラグインを有効化する必要があります。デフォルトでは、管理インターフェースはポート 15672 でリッスンします。

Basic 認証の設定

RabbitMQ Management HTTP API は HTTP Basic 認証を使用します。RabbitMQ 管理ユーザーのユーザー名とパスワードを指定する必要があります。

管理 API へのアクセスを有効にするには、以下のステップで進めます:

  1. サーバーで RabbitMQ Management プラグインが有効になっていることを確認します(rabbitmq-plugins enable rabbitmq_management)。
  2. 既存の管理ユーザーを使用するか、適切な管理タグ(management、policymaker、monitoring、または administrator)を持つユーザーを作成します。
  3. RabbitMQ Management HTTP API の完全なベース URL を控えておきます(例:http://localhost:15672)。

RabbitMQ サーバーを設定したら、以下の接続プロパティを設定して接続します:

  • AuthScheme:Basic に設定します。
  • URL:RabbitMQ Management HTTP API のベース URL に設定します(例:http://localhost:15672)。
  • User:RabbitMQ の管理ユーザー名に設定します(例:guest)。
  • Password:RabbitMQ の管理パスワードに設定します。

接続文字列の例:

Profile=C:\profiles\RabbitMQ.apip;AuthScheme=Basic;URL=http://localhost:15672;User=guest;Password=guest;

利用可能なテーブル

RabbitMQ プロファイルでは、以下のテーブルにアクセスできます:

  • Overview - クラスター全体の統計情報と RabbitMQ ノードに関する情報
  • Nodes - RabbitMQ クラスター内の個々のノードに関する情報
  • NodeMemory - 特定のクラスターノードの詳細なメモリ使用状況の内訳
  • Connections - ブローカーへのすべてのオープンな AMQP コネクションの一覧
  • Channels - すべてのコネクションにわたるオープンな AMQP チャネルの一覧
  • Consumers - すべてのキューに登録されたコンシューマーの一覧
  • Exchanges - すべての仮想ホストで宣言されたエクスチェンジの一覧
  • Queues - すべての仮想ホストで宣言されたキューの一覧
  • Bindings - エクスチェンジとキュー間のすべてのバインディングの一覧
  • VirtualHosts - ブローカーに設定された仮想ホストの一覧
  • VhostPermissions - 特定の仮想ホスト内のユーザー権限
  • Users - すべての RabbitMQ ユーザーの一覧
  • Permissions - すべての仮想ホストにわたる全ユーザーの権限レコード
  • TopicPermissions - 全ユーザーのトピックレベルの権限レコード
  • Policies - 仮想ホスト内のキューおよびエクスチェンジに適用されたポリシーの一覧
  • OperatorPolicies - 仮想ホスト内のキューに適用されたオペレーターポリシーの一覧
  • Parameters - 仮想ホストごとのコンポーネントパラメータ(例:federation、shovel)の一覧
  • GlobalParameters - すべての仮想ホストに適用されるグローバルパラメータの一覧
  • VhostLimits - 特定の仮想ホストに設定されたリソース制限
  • UserLimits - 特定のユーザーに設定されたリソース制限
  • FeatureFlags - フィーチャーフラグの一覧と、ノード上での有効/無効の状態
  • DeprecatedFeatures - 非推奨機能の一覧と、その使用状態
  • AuthAttempts - ノードの認証試行統計
  • ClusterName - RabbitMQ クラスターの名前
  • WhoAmI - 現在認証されている管理ユーザーに関する情報
  • ExchangeBindingsSource - 特定のエクスチェンジがソースとなっているバインディング
  • ExchangeBindingsDestination - 特定のエクスチェンジが宛先となっているバインディング
  • QueueBindings - 仮想ホスト内の特定のキューのバインディング

【設定手順1】SQL Gateway でRabbitMQ ODBC DSN をセットアップする方法

CData ODBC ドライバにはSQL Gateway が同梱されています。このSQL Gateway に、RabbitMQ ODBC Driver をサービスとして設定します。

  1. 「スタート」画面から「SQL Gateway」を起動します。青い「C」のSQL Gateway ロゴが右下のインジケータに表示されます。 アプリケーションコンソールが開かない場合には、SQL Gateway アイコンを右クリックして、「Open Application」をクリックしてください。
  2. アプリケーションコンソールの「Service」タブを開いて、「Add」をクリックして、新しいODBC データソースを設定します。
  3. RabbitMQ ODBC の設定を行います。
    サービス名:任意
    リモーティングDB:TD(SQL Server)を選択
    データソース:ドロップダウンでCData RabbitMQ Source Sys を選択
    ポート:使用していないポートを選択
    CData RabbitMQ ODBC Driver設定画面 - SQL Gatewayでの設定方法
  4. 次に「ユーザー」タブ→「追加」からユーザーを登録します。
    ユーザー毎にFull アクセスか、Readonly か、None の権限を選択できます。
    複数のODBC データソースがある場合には、データソース毎に権限の設定が可能です。
    SQL Gateway ユーザー権限設定画面 - RabbitMQデータアクセス権限の設定方法
    「OK」を押して、ユーザー登録を完了します。 その後「変更を保存」で設定を保存します。
  5. SQL Gateway の「サービス」タブで「開始」ボタンを押して、サービスを起動します。サービスの左側の〇が緑色になれば、サービスは起動中です。

【設定手順2】SQL Server でRabbitMQ リンクサーバーを構築する方法

SQL Gateway 側でサービスの設定が終わったら、SQL Server 側でRabbitMQ サービスをリンクサーバーとして使う設定をしましょう。

  1. SQL Server Management Studio (SSMS) を開きます。
    オブジェクトエクスプローラーの「サーバーオブジェクト」で「リンクサーバー」を右クリックして、「新しいリンクサーバー」をクリックします。
  2. 新しいリンクサーバーの設定画面の「全般」で、以下を入力します。
    サーバー種類:その他データソース
    プロバイダー:Microsoft OLE DB Driver for SQL Server
    データソース:この例の場合、localhost, 1433
    カタログ:ODBC DSN 名を入力
    SQL Server リンクサーバー設定画面 - RabbitMQをリンクサーバーとして追加する方法
  3. また、「セキュリティ」では、「このセキュリティコンテキスト」を選択して、リモートログインにSQL Gateway にユーザー設定したUser 名とPassword を入力します。

これで、リンクサーバーの設定は終わりなので、「OK」を押して設定を保存します。

【活用例1】SSMS(SQL Server Management Studio)でRabbitMQ データを操作する方法

SSMS のオブジェクトエクスプローラーのリンクサーバー下にRabbitMQ のリンクサーバーが作成され、「テーブル」下にRabbitMQ のデータがアプリ単位でテーブルが生成されます。
新しいクエリを選択し、RabbitMQ のデータを取得してみます。

実践的なSQL クエリの例と解説

SELECT * from リンクサーバー名.CData RabbitMQ Source Sys(ODBC DSN 名).RabbitMQ.テーブル名

このように、API のリクエストではなく通常のSQL 構文でデータを扱うことが可能になっています

【活用例2】Visual Studio からRabbitMQ のリンクサーバーに連携する方法

Visual Studio のサーバーエクスプローラーの「データ接続」を右クリックし、「接続の追加」をクリックして、データソースの選択画面を開きます。 データソースの選択画面でデータソースを「Microsoft SQL Server 」に選択して、「続行」を押します。

Visual Studio での接続設定とクエリ実行手順

「接続の追加」画面で、以下を入力します。
サーバー名:SQL Server のサーバー名
認証:任意の認証方式
データベース名の選択または入力:※master など
※リンクサーバーを直接データベース名として入力することはできないようです。なので上位のデータベース名で設定しておきます。

Visual Studio でのRabbitMQリンクサーバー接続設定画面 - データ連携の設定方法

「テスト接続」をして大丈夫であれば、「OK」を押して設定を完了させます。

「新しいクエリ」で、SQL でSELECT 文を書いてデータを取得してみます。

SELECT * from リンクサーバー名.CData RabbitMQ Source Sys(ODBC DSN 名).RabbitMQ.テーブル名

このように、通常のSQL Server のリンクサーバーと同じようにVisual Studio 内RabbitMQ のデータを扱うことが可能になります。 他のIDE でもSQL Server にアクセスする方法でRabbitMQ のデータにSQL でアクセスが可能になります。
複数データソースのJOIN などを行う場合には大変便利です。

【応用編】RabbitMQ データとSQL Server データを組み合わせた高度な活用例

リンクサーバーの真価は、異なるデータソースを組み合わせた分析や処理にあります。以下に実践的な活用例をご紹介します。

複数データソースの結合(JOIN)によるデータ統合

SELECT
  s.customer_id,
  s.customer_name,
  o.order_id,
  o.order_date,
  o.total_amount
FROM
  Sales.Customers s
JOIN
  リンクサーバー名.CData RabbitMQ Source Sys.RabbitMQ.Orders o
ON
  s.customer_id = o.customer_id
WHERE
  o.order_date > '2023-01-01'
ORDER BY
  o.total_amount DESC

このクエリ例では、SQL Server内の顧客データとRabbitMQ 内の注文データを顧客IDで結合し、2023年以降の注文を金額順に表示しています。

おわりに

このようにCData ODBC ドライバと併用することで、RabbitMQ を含む270を超えるSaaS、NoSQL データをSQL Server に連携できます。30日の無償評価版が利用できますので、ぜひ自社で使っているクラウドサービ スやNoSQL と合わせて活用してみてください。

はじめる準備はできましたか?

API Driver で RabbitMQ のライブデータに接続

RabbitMQ に接続