2012-02-27 1 views
1

:어떻게 타임 아웃 기능을 LMAX Disruptor Queue에 적용 할 수 있습니까? LMAX 스럽 터의 개발자/사용자 <a href="http://code.google.com/p/disruptor/" rel="nofollow">http://code.google.com/p/disruptor/</a>으로

내 질문 : 사람이 스럽 예에 타임 아웃 기능을 어떻게 적용되는지에 대한 접근 방식을 제안 할 수 EventHandler를 사용하고 있습니까? - ACK 메시지 서버

  • ACK 처리기에서 수신 -
  • 받은 편지함은 네트워크를 통해 서버로 전송 된 메시지 -

    1. 보낼 편지함 :

      여기에 작품의 내 라인에서 온 한 시나리오 NACKed로 표시 메시지를 보낼 편지함 (많이 필요하지만, 어디는 스럽 디자인에 맞게 할 수 있습니까?)

    - 마크 애크
  • 시간 초과 핸들러로 메시지를 보낼 편지함

    의견이 같습니까? 또는 왜 불필요한 지 지적 해 줄 수 있습니다. 나는 계속되는 논쟁이 간단하기를 바란다.

    감사합니다.

  • 답변

    0

    시간 초과 처리기가 메시지를 배달 할 수없는 특정 시간이 지나면 "실행"하겠습니까?

    방해가되는 방식은 인바운드 링 버퍼와 아웃 바운드 메신저를위한 링 버퍼가 있다는 것입니다. 따라서 이메일이 들어오고 적절한 이벤트를 사용하여 인바운드 링 버퍼에 저장하십시오. 그런 다음 메시지를 처리 ​​(즉, 디코딩, analye, 로그, 저장)하고 아웃 바운드 ringbuffer에 배치하여 다른 시스템으로 보내십시오 ... 다른 핸들러가 메시지를 가져 와서 데이터베이스에 저장하거나 smtp를 사용하여 다른 서버로 보냅니다 ... 오류/시간 초과 등이 발생하면 인바운드 링 버퍼에서 오류 (NACK)를 알리고이 메시지를 처리하는 이벤트를 만듭니다. 말이 돼?!?

    +0

    예, 임의의 객체가 링 버퍼에서 너무 길게 유지되면 호출되는 Timeout EventHandler입니다. 문제는 EventHandler를 구현하고 RingBuffer/Distruptor에 등록하여 시간 제한을 지원하는 방법을 알 수 없다는 것입니다. 내가 생각할 수있는 유일한 해결책은 내 자신의 EventProcessor를 사용자 정의하는 것입니다. –

    +0

    soooo 답장을 보내지 않아 죄송합니다. 설정된 횟수만큼 다시 게시해야합니다. 즉 이메일을 보내는 재시도 횟수 ... 또는 시간 t가 경과 할 때까지 ... 다시 스레드가 항상 다시 돌아옵니다. –