2017-07-27 10 views
2

MSMQからメッセージを受信するBizTalkオーケストレーションがあります。メッセージを処理して別のシステムに送信します。BizTalkを作成する方法MSMQから一度に1つのメッセージしか受信しない

メッセージはキューに置かれるたびに、BizTalkは以前のメッセージを処理していてもすぐにキューから取り出します。オーケストレーションを再起動すると、未処理のメッセージがすべて削除されるため、これは本当の苦痛です。

BizTalkが一度に1つのメッセージしか受信できないようにする方法はありますか?次のメッセージを受信する前にメッセージの処理が完全に終了するようにしてください。

申し訳ありませんこれは明らかな質問ですが、私はBizTalkシステムを継承しており、オンラインで回答を見つけることができません。

+0

あなたはあなたの痛みのポイントもう少し説明できますか?再オーケストレーションではどういう意味ですか?それはホストインスタンスを再起動しますか?それは決してメッセージ損失を引き起こすべきではありません。他の根本的な問題のためにこのような処理を導入したいと思うようです。 –

答えて

0

オーダードデリバリを使用してメッセージを順番に処理することはできますが、求めているとおりにシリアル化する方法はありません。

しかし、単にオーケストレーションを停止しても、すべての未処理メッセージが削除されることはありません。それはあなたの問題だと思う。

何も失うことなく処理を停止することができます。

Orchestrationは中断状態に起こっている場合は、あなたがする必要があるのは1つのオーケストレーションとキューに入れられたすべてのメッセージが残され、処理されることを再開です。これは、アプリケーションが誤って「正しく」作成されたとしてもデフォルトの動作になります。

アプリケーションを停止すると、実際には、既存のオーケストレーションとそれに関連付けられているすべてのもの(キューに入れられたメッセージを含む)が終了します。

元の開発者がPortエラーを適切に処理しなかった場合、オーケストレーションが完了できないループでスタックする可能性があります。オーケストレーション自体には(非常にマイナーな)改造が必要です。

+0

私はコードがひどく書かれていると思われますが、アプリケーションをサポートするだけで、コードを修正するスキルはなくなりました。ダウンストリームシステムが応答していないなどの理由で、繰り返し失敗することがあり、オーケストレーションが中断し、オーケストレーションを再起動する必要があるというメッセージがログに記録されることがあります。これを実行すると、再び処理が開始されますが、キューから削除された未処理のメッセージはすべて削除されます。 –

+0

これは、アプリケーションを再起動することで行います。私はちょうど見て、実際には私たちはオーケストレーションを再起動することができますか?代わりにそれをしなければならないのでしょうか? –

+0

@ChrisWignallコメントは、コメントに基づいて更新されました。 –

1

あなたと遊ぶために試みることができるのBizTalk MSMQアダプタの3つのプロパティがあります。

BATCHSIZE

は、アダプタが一度にキューを離陸するメッセージの数を指定します。デフォルト値は20です。

これはあなたの役に立つかもしれません。 1に設定しても、BTSは残りの「単一」メッセージを同時に処理しようとしますが、これは常に並列処理を試みると思われますが、間違っている可能性があります。

serialProcessing

メッセージは、彼らがエンキューされた順序でデキューされている指定します。デフォルトはfalseです。

これは、順序付けられた処理を保証するために、基本的にはシングルスレッド処理に限定されているため、役立つ可能性があります。しかし、これだけで十分かどうか、またはメッセージボックスデータベースへのメッセージ配信の順序を仲介するかどうかはわかりません。設計時にのみ行うことができる(つまり、コード変更が必要)BTSアプリケーション全体で、秩序のある配信を有効にする必要があるかもしれません。

トランザクション

メッセージはDTCトランザクションの一部としてメッセージボックスデータベースに送信されることを指定します。デフォルトはfalseです。

これは、メッセージが「迷子になる」という他の問題に役立つ可能性があります。キューがトランザクションではなく、さらにメッセージボックスDBに達するより大きなトランザクションスコープに登録されていない場合、メッセージはデキューされても処理されないとメッセージが失われます。プロセス全体をアトミックにすることで、メッセージボックスにコミットされていないメッセージはすべてキューにロールバックされます。

出典: https://msdn.microsoft.com/en-us/library/aa578644.aspx

関連する問題