Red Hat Training

A Red Hat training course is available for JBoss Enterprise SOA Platform

9.4. メッセージの損失

多くの分散システムは、ポイントツーポイント(1 つのコンシューマーとプロバイダー)またはグループベース(多数のコンシューマーと 1 つのプロバイダー)のいずれかの信頼できるメッセージ配信をサポートします。障害が存在する場合でも、信頼性に制限されるセマンティクスは、通常メッセージが配信されるか、送信者が受信側に到達できなかったことを通知します。多くの場合、信頼できるメッセージング実装を使用するシステムは、受信者に配信されるメッセージと、受信者によって処理されるメッセージを区別します。たとえば、メッセージをサービスに送信するだけでは、同じサービスの後続のクラッシュが発生した場合は、メッセージの内容で作業する時間がかかっていました。
JBoss Enterprise SOA Platform 内では、JMS はメッセージ配信と処理の失敗セマンティクスを提供する唯一のトランスポートです。トランザクションセッション( JMSEprの任意部分)を使用する場合、障害発生時にメッセージが受信および処理されることを保証することができます。サービスによる処理中に障害が発生した場合、メッセージは後で再処理するために JMS キューに戻されます。ただし、トランザクションセッションは非トランザクションセッションよりもはるかに遅くなる可能性があるため、注意して使用する必要があります。
製品がサポートする他のトランスポートにはトランザクションまたは信頼できる配信の保証が含まれるため、メッセージが失われる可能性があります。ただし、ほとんどの場合、これが発生する可能性は小さくなります。送信側と受信側の同時障害(許容可能だがプローブできない)がない限り、送信者はメッセージ配信の失敗について JBoss Enterprise SOA Platform によって通知されます。処理中に受信側が失敗し、応答が想定される場合、受信側は最終的にタイムアウトし、再試行できます。
注記
非同期メッセージ配信を使用すると、障害の検出/発行が困難になる可能性があります(実際には、理論的には実現できなくなります)。アプリケーションの開発時には、この要素を考慮する必要があります。
このような理由から、メッセージのフェイルオーバーおよび再配信プロトコルを使用することが適切なアプローチです。サービスの障害が疑われる場合は、別の EPR (利用可能な場合を想定)を選択し、これを使用します。ただし、この障害の疑わしい場合は、複数のサービスが同じメッセージで同時に操作する可能性があります。したがって、フェイルオーバーのより堅牢なアプローチを提供しますが、注意して使用する必要があります。サービスがステートレスでべき等である場合に最適に機能します。(つまり、同じメッセージを複数回実行することは、1 回実行するのと同じです。)
多くのサービスやアプリケーションの場合、このタイプの再配信メカニズムは問題ありません。単一の EPR で提供する堅牢な利点は、大きな利点になります。機能しない障害モード(クライアントおよびサービスが失敗する場合や誤って失敗した場合など)は比較的一般的ではありません。サービスをべき等にできない場合は、JMS を使用するか、またはサービスをコードして、再送信を検出し、同じ作業を同時に実行する複数のサービスに対応できるようにする必要があります。