2017-09-24 8 views
0

기존 msg 기반 소프트웨어 마이그레이션을 위해 NATS를 평가 중입니다 msg 시간 초과 예외 및 과부하에 대한 설명서를 찾지 못했습니다. 예를 들어 는 : 가입자 후시간 초과시 Nats.io QueueSubscribe 동작

  • 되어 선택했다, 그것은 게시자에 의해 게시 시간 제한 설정을 알고 있습니까? 추가 시간 연장을 통보하는 것이 가능합니까?
  • 선출 가입자가 일부 DBMS 연결이 누락과 메시지를

NATS 서버를 반송 할 수 있었다 완료 할 수없는 것을 알고있는 경우 것입니다 픽업 다른 가입자와 같은 메시지 게시물을 다시 할 것인가? 첫 번째 질문에 대한 챠오 디에고

+0

NATS 스트리밍 서버에도 대기열이 있으며 * ManualAck * 및 재 배달 동작이라는 옵션이 있습니다 (https://github.com/nats-io/nats-streaming-server/issues/186 참조).) –

답변

1

:합니다 (nc.Request를 사용하여) 당신이 타임 아웃 요청 메시지를 게시하려고하는 나에게 보인다. 그렇다면 클라이언트가 시간 초과를 관리합니다. 효과적으로 클라이언트는 요청 메시지를 게시하고 응답 제목에 대한 구독을 만듭니다. 구독이 제한 시간 내에 메시지를받지 못하면 시간 초과 조건을 알리고 응답 제목을 구독 취소합니다.

두 번째 질문에 - 대기열 그룹을 사용하고 있습니까? NATS의 대기열 그룹은 대기열 그룹 이름을 지정하는 가입입니다. 동일한 큐 그룹 이름을 갖는 모든 서브 스크립 션은 서버에 의해 특별히 처리됩니다. 서버는 메시지가 도착할 때 대기열 그룹 구독 중 하나를 선택하여 둘 사이에서 회전하는 메시지를 보냅니다. 그러나 서버의 책임은 단순히 메시지를 전달하는 것입니다.

설명을 원하면 타임 아웃과 1의 최대 메시지 수를 사용하여 요청/응답을 사용하여 기능을 구현하십시오. 시간 초과 후 응답이 수신되지 않으면 클라이언트는 약간의 지연 또는 요청 메시지를 재전송 할 수 있습니다. 다른 유형의 복구 논리를 수행하십시오. 응답 메시지는 메시지가 제대로 처리되었음을 알 수 있도록 '프로토콜'이어야합니다. 이것이 메시징 아키텍처 설계에 들어간다는 점에 유의하십시오. 예를 들어 요청 수신자가 메시지를 수신하고 처리 한 후 클라이언트 또는 서버가 응답을 게시 할 수 있기 전에 시간 초과가 트리거 될 수 있습니다. 이 경우 요청 발신자는 차이점을 알 수 없으며 결국 다시 게시하게됩니다. 이것은 이러한 유형의 상호 작용이 중복 된 부작용을 방지하기 위해 요청을 멱등하게 만들 필요가 있음을 암시합니다.

+1

또한 NATS 스트리밍은 완전히 다른 것입니다. NATS 스트리밍 서버는 로그의 모든 메시지를 캡처합니다. NATS 스트리밍 서버는 로그를 NATS 스트리밍 가입자에게 '재생합니다'. NATS와 마찬가지로 구독자는 대기열 그룹의 구성원이 될 수 있으며 로그의 메시지는 대기열 그룹 구성원간에 분산됩니다. –

+0

의견을 보내 주셔서 감사합니다. 최종 문장에 동의합니다. _... 중복 된 부작용을 방지하기 위해 멱등 원들로 요청하십시오 ... _ 그것은 현재 술집/부 아키텍처 내에서 코딩해야하는 코드의 핵심 요소입니다. 내 test env를 간단한 NATS pub sub로 복제하고 모든 복구 시나리오를 다시 테스트 할 것입니다. –