MSMQを介したBig Biztalkのメッセージング

タスクは仕事から生まれました:Biztalkを通してディレクトリを配布するために、ディレクトリ自体は非常に大きく、300メガバイト以上です。 MSMQを使用して、非常に大きなメッセージを受信することが決定されました。 そして今、これを行うために必要なことをより詳細に。

もちろん、最初にできることはグーグルです。MSDNでこのすべてを実装する方法の例を見つけるためにグーグルを使用します(変更とともに後でロシア語で説明します)。さまざまなタスクに必要です。 それでは始めましょう。



開発には、次のものが必要です。



プロジェクト<BizTalk Server 2010 SDKへのパス> \ AdaptersUsage \ MSMQLarge \ LargeMes​​sages.slnを開きます。 ソリューションには2つのプロジェクトが含まれていることがわかります。1つはC ++。NET、もう1つはC#です。 メッセージをキューで分割するサイズを選択する機能は、クラスで修正する必要があります。 ソースコードからわかるように、サイズは関数に渡されます。

MQSendLargeMessage(unmanagedQueueData->queueHandle, &(messageData->message), MQ_SINGLE_MESSAGE, MQRTLARGE_USE_DEFAULT_PART_SIZE);
      
      





デフォルトでは、 MQRTLARGE_USE_DEFAULT_PART_SIZEは確実にゼロに設定されます。これは、サーバーの裁量でサイズを使用することを意味します。 この目的のために、プライベート変数dwQueuePartSizeを追加し、それに応じてプライベート関数Initを変更します(...)

 void Init(String* formatName, bool useAuthentication, DWORD dwQueuePartSize) { this->formatName = formatName; this->useAuthentication = useAuthentication; this->dwQueuePartSize=dwQueuePartSize; AllocUnmanagedQueueData(); }
      
      





現在、初期化中にサイズを設定する追加のパラメーターがあります。 次に、この関数を使用するコンストラクターを適宜変更する必要があります。

 LargeMessageQueue(String* formatName, bool useAuthentication) { Init(formatName, useAuthentication, 0); } LargeMessageQueue(String* formatName) { Init(formatName, false, 0); }
      
      





これで、適切な値を取るコンストラクターを追加できます。

 LargeMessageQueue(String* formatName, DWORD dwQueuePartSize) { Init(formatName, false, dwQueuePartSize); } LargeMessageQueue(String* formatName, bool useAuthentication, DWORD dwQueuePartSize) { Init(formatName, useAuthentication, dwQueuePartSize); }
      
      





任意のサイズを設定できるように、2つの標準コンストラクターを複製しました。 ちょっとしたコメント:既に宣言されているコンストラクターにパラメーターを追加してInitパラメーターを調整することは可能ですが、既に実装されている可能性のある他のソリューションとライブラリーの後方互換性を失うか、このライブラリーに基づいたサードパーティのソリューションを使用します。

この段階で、必要な機能を備えた作業ライブラリを取得します。 簡単な例を使用して、これらすべてをテストします。 これを行うには、C#で記述されたソリューションの2番目のプロジェクトを開き、App.csファイルを開いて次のフラグメントを修正します

 LargeMessageQueue queue = new LargeMessageQueue(queueFormatName);  LargeMessageQueue queue = new LargeMessageQueue(queueFormatName, 3145728);
      
      





現在、プロジェクトの完全なアセンブリを行っています。最初にBuild Cleanを実行することをお勧めします。

ここで開発が終了します。 テストのために、キューからメッセージを取得してC:\ Demoフォルダーに入れる簡単なBizTalkアプリケーションを作成します。

  1. Testという名前でローカルコンピューターにプライベートキューを作成します作成するときは、トランザクションキューによるサポートを示すパラメーターを選択する必要があります。 BizTalk Serverを実行しているユーザーがこのキューからメッセージを受信する権利を必ず確認してください。
  2. フォルダーC:\ Demoを作成します。 繰り返しますが、BizTalk Serverを実行しているユーザーのフォルダーに書き込む権限を必ず確認してください。
  3. 3. Biztalk管理コンソールを開き、新しいアプリケーションを作成します。MSMQBiztalkTestと呼びましょう。 このアプリケーションでは、静的な一方向送信ポートタイプの送信ポートを作成し、MySendPortという名前を付けます。 トランスポートタイプ-FILEを選択し、それに応じて、以前に作成したC:\ Demoフォルダーにメッセージをスタックするように構成します。 このポートに次の値を使用してフィルターを設定します。BTS.ReceivePortName== MyReceivePort
  4. 一方向受信ポートタイプの新しい受信ポートを作成し、MyReceivePortという名前を付けます。 このポートに対して、MSMQReceiveLocationと呼ばれる一方向受信ロケーションタイプの新しい受信ロケーションを作成します。 MSMQと等しいTransport Typeを選択し、Queueをlocalhost \ private $ \ testと等しく設定し、TransactionalをTrueに設定する設定で、このためにキューからメッセージを受信するように設定します。
  5. このテストでは、BizTalkアプリケーションが作成されます。これを開始して、Biztalkサービスを再起動する必要があります。


メッセージをキューに送信するには、先にVisualStudio 2010で作成したアプリケーションを使用します。コマンドラインから機能し、キューパラメーターと送信するファイルの名前の2つのパラメーターを受け取ります。

SendLargeMes​​sage.exe DIRECT = OS:localhost \ private $ \ Test "C:\ TestData \ LargeFile.xml"

ファイルのサイズに応じて、C:\ Demoディレクトリで数秒でファイルを観察し、徐々に大きくなるのを見ることができます。

それだけです 誰かが質問や提案があれば、私はコメントのすべてに答えさせていただきます。

ソース:

MSMQへの大きなメッセージ




All Articles