271.7. InOut メッセージエクスチェンジパターンの使用
Camel 2.8+
FIX プロトコルはイベント駆動型で非同期ですが、要求と応答のメッセージエクスチェンジを表す特定のメッセージのペアがあります。InOut エクスチェンジパターンを使用するには、リクエストに対する単一のリクエストメッセージと単一のレスポンスメッセージが必要です。例には、OrderStatusRequest メッセージと UserRequest が含まれます。
271.7.1. コンシューマー向けの InOut Exchange の実装
QuickFIX/J エンドポイント URI に exchangePattern=InOut を追加します。以下の例の MessageOrderStatusService
は、同期サービスメソッドを持つ Bean です。このメソッドは、リクエストに対するレスポンス (この場合は ExecutionReport) を返し、それがリクエスターセッションに送り返されます。
from("quickfix:examples/inprocess.cfg?sessionID=FIX.4.2:MARKET->TRADER&exchangePattern=InOut") .filter(header(QuickfixjEndpoint.MESSAGE_TYPE_KEY).isEqualTo(MsgType.ORDER_STATUS_REQUEST)) .bean(new MarketOrderStatusService());
271.7.2. プロデューサーのための InOut Exchange の実装
プロデューサーの場合、メッセージの送信は、レスポンスが受信されるかタイムアウトが発生するまでブロックされます。FIX でレスポンスメッセージを相互に関連付ける標準的な方法はありません。したがって、InOut エクスチェンジのタイプごとに相関基準を定義する必要があります。相関条件とタイムアウトは、Exchange
プロパティーを使用して指定できます。
説明 | キー文字列 | キー定数 | デフォルト |
---|---|---|---|
相関基準 | "CorrelationCriteria" | QuickfixjProducer.CORRELATION_CRITERIA_KEY | なし |
ミリ秒単位の相関タイムアウト | "CorrelationTimeout" | QuickfixjProducer.CORRELATION_TIMEOUT_KEY | 1000 |
相関基準は、MessagePredicate
オブジェクトで定義されます。次の例では、トランザクションタイプが STATUS で、注文 ID がリクエストと一致する指定されたセッションからの FIX ExecutionReport を処理します。セッション ID は requestor 用である必要があります。sender および target CompID フィールドは、返信を探すときに逆になります。
exchange.setProperty(QuickfixjProducer.CORRELATION_CRITERIA_KEY, new MessagePredicate(new SessionID(sessionID), MsgType.EXECUTION_REPORT) .withField(ExecTransType.FIELD, Integer.toString(ExecTransType.STATUS)) .withField(OrderID.FIELD, request.getString(OrderID.FIELD)));
271.7.3. 例
ソースコードには、コンシューマーとプロデューサーの InOut エクスチェンジを示す RequestReplyExample
という例が含まれています。この例では、注文状況リクエストを受け入れる単純な HTTP サーバーエンドポイントを作成します。HTTP リクエストは FIX OrderStatusRequestMessage に変換され、相関基準で拡張されてから、quickfix エンドポイントにルーティングされます。次に、レスポンスは JSON 形式の文字列に変換され、HTTP サーバーエンドポイントに返されて、Web レスポンスとして提供されます。
Spring 設定は、Camel 2.9 以降で変更されました。例については、以下を参照してください。