もちろん、最初にできることはグーグルです。MSDNでこのすべてを実装する方法の例を見つけるためにグーグルを使用します(変更とともに後でロシア語で説明します)。さまざまなタスクに必要です。 それでは始めましょう。
開発には、次のものが必要です。
- Visual Studio 2010 SP1
- Biztalk Server 2010 SDK
- Biztalk Server 2010(テスト用)
- それを理解したいという願望
プロジェクト<BizTalk Server 2010 SDKへのパス> \ AdaptersUsage \ MSMQLarge \ LargeMessages.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アプリケーションを作成します。
- Testという名前でローカルコンピューターにプライベートキューを作成します作成するときは、トランザクションキューによるサポートを示すパラメーターを選択する必要があります。 BizTalk Serverを実行しているユーザーがこのキューからメッセージを受信する権利を必ず確認してください。
- フォルダーC:\ Demoを作成します。 繰り返しますが、BizTalk Serverを実行しているユーザーのフォルダーに書き込む権限を必ず確認してください。
- 3. Biztalk管理コンソールを開き、新しいアプリケーションを作成します。MSMQBiztalkTestと呼びましょう。 このアプリケーションでは、静的な一方向送信ポートタイプの送信ポートを作成し、MySendPortという名前を付けます。 トランスポートタイプ-FILEを選択し、それに応じて、以前に作成したC:\ Demoフォルダーにメッセージをスタックするように構成します。 このポートに次の値を使用してフィルターを設定します。BTS.ReceivePortName== MyReceivePort
- 一方向受信ポートタイプの新しい受信ポートを作成し、MyReceivePortという名前を付けます。 このポートに対して、MSMQReceiveLocationと呼ばれる一方向受信ロケーションタイプの新しい受信ロケーションを作成します。 MSMQと等しいTransport Typeを選択し、Queueをlocalhost \ private $ \ testと等しく設定し、TransactionalをTrueに設定する設定で、このためにキューからメッセージを受信するように設定します。
- このテストでは、BizTalkアプリケーションが作成されます。これを開始して、Biztalkサービスを再起動する必要があります。
メッセージをキューに送信するには、先にVisualStudio 2010で作成したアプリケーションを使用します。コマンドラインから機能し、キューパラメーターと送信するファイルの名前の2つのパラメーターを受け取ります。
SendLargeMessage.exe DIRECT = OS:localhost \ private $ \ Test "C:\ TestData \ LargeFile.xml"
ファイルのサイズに応じて、C:\ Demoディレクトリで数秒でファイルを観察し、徐々に大きくなるのを見ることができます。
それだけです 誰かが質問や提案があれば、私はコメントのすべてに答えさせていただきます。
ソース:
MSMQへの大きなメッセージ