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());
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)));
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에서 변경되었습니다. 예를 들면 아래를 참조하십시오.