2014-02-10 3 views
0

다음을 수행해야하는 C#의 QuickFix 서비스 이니시에이터 구현 과정에 있습니다.Quickfix C# 이니시어너 구현 질문

  1. 들어오는 QuoteRequest 메시지를 듣고 로컬 데이터베이스/큐에 저장하십시오.
  2. Google 사용자는 이러한 견적 요청에 대해 입찰가를 설정할 수 있습니다. 이러한 선택 항목은 로컬 큐에 저장됩니다. 서비스는 대기열을 읽고 견적 메시지를 보낸 사람에게 다시 보내야합니다.
  3. 견적을 듣고 응답/BusinessReject 및 QuoteStatus 보낸 사람이 보낸 메시지와 우리쪽에 저장하십시오.

내 서비스에는 두 개의 스레드가 있습니다.

스레드 1 : 수신되는 QuoteRequest, 견적 응답, Businessreject 및 quotestatus 메시지를 수신하는 데 사용됩니다. QuoteResponse 메시지를 크랙하는 동안 OnMessage 이벤트 처리기에서 나가는 ExecutionReport가 전송됩니다. 해당 메시지는 Google 시스템에 저장되어 사이트/대기열 등에 게시됩니다.

스레드 2 : 다른 로컬 대기열을 수신하고 수신자에게 견적 (입찰) 메시지를 보냅니다. 따옴표는 Session.SendToTarget을 사용하여 보내집니다.

각 스레드에서 두 개의 초기화 프로그램 인스턴스를 사용하도록 구성 할 수 있습니까? 또는 하나의 개시자를 만들고 두 개의 세션을 추가합니까? 두 Initiator가 동일한 소켓 서버와 포트를 사용하는 경우 작동합니까? 또한 메시지가 한 스레드에 의해 깨지지 않는 경우 다른 스레드에서 사용할 수 있습니까? 들어오는 메시지와 나가는 메시지를 모두 처리 할 수있는 다중 스레드 접근 방식의 예가 없습니다.

올바른 구현 방법에 대한 모든 입력/권장 사항을 이해하십시오.

답변

0

이것은 하나의 연결이며 하나의 세션이므로 하나의 초 기자 만 있어야합니다.

다른 작업자 스레드를 설정할 수 있지만 다양한 OnMessage() 콜백은 공통 진입 점이어야합니다. 수신 된 메시지를 스레드로 보낼 수 있습니다 (수신 된 메시지를 큐에 넣거나 스레드가 소비 할 수 있도록 푸시 할 수 있습니다). 스레드는 필요한 작업을 수행 한 다음 sendToTarget을 적절하게 호출 할 수 있습니다.

무엇보다 값 비싼 논리를 QF 콜백에 넣지 않으려 고합니다. 스레드에 넣으십시오. 그 외에는 원하는 것을 할 수 있습니다.