BizTalk での次のメッセージ フローを検討してください。
1 つのアプリケーションで HL7v2 メッセージを受信する複数の MLLP 受信ポート/場所が設定されています。これらのポートはそれぞれ、わずかに異なるメッセージ タイプを受信します。
これをRP1としましょう
別のアプリケーションでは、それぞれの受信ポートにサブスクライブする送信ポートがあります。これらの送信ポートにはそれぞれ、HL7v3 でメッセージを変換し、WCF (要求/応答) サービスに送信するアウトバウンド マップがあります。
これをSP1としましょう
次に、WCF サービスは HL7v3 を処理して検証し、HL7v3 ack メッセージを返します。SP1 送信ポートには、カスタムの送信および受信パイプライン コンポーネントがあります。受信 (WCF 応答から) はメッセージを受け取り、後でサブスクリプションに使用される特定のフィールドを昇格させます。
さらに 2 つの送信ポートがあります。肯定的な ACK にサブスクライブする SP2。上記で促進されたフィールドに基づいて、SP3からネガティブに。肯定的な ACK は消費されるだけで、否定的な ACK はサポート スタッフに電子メールで送信されます。
問題は、メッセージの約 10% で、次の 2 つのエラー メッセージのうちの 1 つが表示されることです。
A response message for two-way receive port "SP.CDX.LAB_MICRO.SubmitCDA.WCFCustom" is being suspended as the messaging engine could not correlate the response to an existing request message. This usually happens when the host process has been recycled.
MessageId: {731623F3-995B-4C57-BD21-12865AD78717}
InstanceID: {084BD473-C857-4C5E-A49B-8A86EA2CAC39}
The following stored procedure call failed: " { call [dbo].[bts_UpdateMsgbox_BizTalkServerReceive]( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}". SQL Server returned error string: "The statement has been terminated.;Cannot insert duplicate key row in object 'dbo.InstancesSuspended' with unique index 'IX_InstancesSuspended_InstanceID'. The duplicate key value is (084bd473-c857-4c5e-a49b-8a86ea2cac39, afa466c7-3bd2-4cde-a293-3df3fb5d8543)."
通常、グループ ビューアで一時停止されたサービス インスタンスが続きます。
The instance completed without consuming all of its messages. The instance and its unconsumed messages have been suspended
中断されたインスタンスのサービス名は RP1 のサービス名です。非消費メッセージのメッセージ タイプは、SP1 からの ACK のメッセージ タイプです (つまり、WCF 応答です)。私の考えでは、RP1 はこの応答メッセージを期待するべきではなく、応答メッセージの種類にサブスクライブされた送信ポート (SP2、SP3) があるため、これは奇妙です。
忘れていたもう 1 つのポイントは、RP1 のような 3 つの受信ポートがあり、それぞれに 3 つの受信場所と 3 つの送信ポートがそれぞれの受信ポートにサブスクライブしていることです。
BizTalk Server は、1 つの BizTalkMgmtDb/Messagebox を共有する 2 つの物理サーバーにインストールされます。
これ以前は、同じ数のメッセージがフィードされていましたが、(送信側で) 1 つの受信場所に統合されていました。古いソリューションには複数のオーケストレーションがありましたが、この問題は発生しませんでした。
では、RP1 (HL7v2) のインスタンスで WCF (HL7v3) 応答メッセージが失われ、中断されているのはなぜでしょうか?
これがどのように見えるかの基本的なイメージです。