270.7. InOut 메시지 교환 패턴 사용
Camel 2.8+
FIX 프로토콜은 이벤트 중심적이고 비동기적이지만 요청-응답 메시지 교환을 나타내는 특정 쌍의 메시지가 있습니다. InOut 교환 패턴을 사용하려면 요청에 대한 단일 요청 메시지와 단일 응답 메시지가 있어야합니다. 예를 들어 OrderStatusRequest 메시지 및 UserRequest가 있습니다.
270.7.1. 소비자용 InOut Exchanges 구현
QuickFIX/J 인포인트 URI에 "exchangePECDHEn=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());
270.7.2. Producers를 위한 InOut Exchanges 구현
생산자의 경우 응답을 수신하거나 시간 초과가 발생할 때까지 메시지를 보냅니다. FIX에서 응답 메시지의 상관 관계를 유지하는 표준 방법은 없습니다. 따라서 InOut 교환의 각 유형에 대해 상관 관계를 정의해야 합니다. Exchange
속성을 사용하여 상관관계 기준 및 타임아웃을 지정할 수 있습니다.
설명 | 키 문자열 | 주요 Constant | Default |
---|---|---|---|
일치하지 않음 | "CorrelationCriteria" | QuickfixjProducer.CORRELATION_CRITERIA_KEY | 없음 |
ECDHEiseconds의 상관 관계 시간 초과 | "CorrelationTimeout" | QuickfixjProducer.CORRELATION_TIMEOUT_KEY | 1000 |
상관관계 조건은 MessagePredicate
오브젝트로 정의됩니다. 다음 예에서는 트랜잭션 유형이 STATUS이고 Order ID가 요청과 일치하는 지정된 세션의 FIX ExecutionReport를 처리합니다. 세션 ID는 요청 자의 여야 하며 응답을 검색할 때 발신자 및 대상 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)));
270.7.3. 예제
소스 코드에는 소비자 및 생산자의 InOut 교환을 보여주는 RequestReplyECDHE 예제
가 포함되어 있습니다. 이 예제에서는 주문 상태 요청을 허용하는 간단한 HTTP 서버 끝점을 생성합니다. HTTP 요청은 FIX OrderStatusRequestMessage로 변환되고, 상관 조건으로 보강되며, 그러면 빠른 수정 끝점으로 라우팅됩니다. 그러면 응답이 JSON 형식 문자열로 변환되고 웹 응답으로 제공될 HTTP 서버 끝점으로 다시 전송됩니다.
Spring 구성이 Camel 2.9에서 변경되었습니다. 예를 들면 아래를 참조하십시오.