271.7. InOut 메시지 교환 패턴 사용
Camel 2.8 이상
FIX 프로토콜은 이벤트 중심적이고 비동기적이지만 요청별 메시지 교환을 나타내는 특정 메시지 쌍이 있습니다. InOut 교환 패턴을 사용하려면 요청에 대한 단일 요청 메시지와 단일 응답 메시지가 있어야 합니다. 예를 들면 OrderStatusRequest 메시지와 UserRequest가 있습니다.
271.7.1. 소비자를 위한 InOut Exchanges 구현 링크 복사링크가 클립보드에 복사되었습니다!
QuickFIX/J enpoint URI에 "exchangePattern=InOut"을 추가합니다. 아래 예제의 MessageOrderStatusService 는 동기 서비스 메서드를 사용하는VLAN입니다. 메서드는 요청자 세션으로 다시 전송되는 요청(이 경우 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. Producers를 위한 InOut Exchanges 구현 링크 복사링크가 클립보드에 복사되었습니다!
생산자의 경우 응답을 수신하거나 시간 초과가 발생할 때까지 메시지를 보내는 것이 차단됩니다. FIX에서 응답 메시지를 상호 연관시키는 표준 방법은 없습니다. 따라서 InOut 교환의 각 유형에 대해 상관관계 기준을 정의해야 합니다. 상관 관계 기준 및 타임아웃은 교환 속성을 사용하여 지정할 수 있습니다.
| 설명 | 키 문자열 | 키 연속(Key Constant) | Default |
|---|---|---|---|
| 상관 관계 기준 | "CorrelationCriteria" | QuickfixjProducer.CORRELATION_CRITERIA_KEY | 없음 |
| Milliseconds의 상관관계 시간 초과 | "CorrelationTimeout" | QuickfixjProducer.CORRELATION_TIMEOUT_KEY | 1000 |
상관 관계 기준은 MessagePredicate 오브젝트로 정의됩니다. 다음 예제에서는 트랜잭션 유형이 STATUS이고 주문 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)));
271.7.3. 예제 링크 복사링크가 클립보드에 복사되었습니다!
소스 코드에는 소비자 및 생산자에 대한 InOut 교환을 보여주는 RequestReplyExample 이라는 예제가 포함되어 있습니다. 이 예제에서는 주문 상태 요청을 수락하는 간단한 HTTP 서버 끝점을 생성합니다. HTTP 요청은 FIX OrderStatusRequestMessage로 변환되고, 상관 기준에 따라 보강되고, 빠른 수정 끝점으로 라우팅됩니다. 그런 다음 응답이 JSON 형식의 문자열로 변환되고 웹 응답으로 제공되도록 HTTP 서버 엔드포인트로 다시 전송됩니다.
Spring 구성이 Camel 2.9 이후에서 변경되었습니다. 예를 들어 아래를 참조하십시오.