2017-01-06 4 views
0

최근에 우리 토끼 클러스터에 인위적으로 높은 부하가 주어져서 API 중 하나가 응답하지 않는 중단이있었습니다. 모노 (.NET)로 쓰레드가 부족하고 API 요청이 실패한 곳입니다. 이것이 다시는 일어나지는 않을지라도, 우리는 이것을 막기 위해 약간의 보호를하고 싶습니다. 이상적으로 우리는 bus.Publish()에 대한 호출 시간을 정해진 시간 후에 타임 아웃하지만 우리는 운동을 할 수 없습니다..NET 응용 프로그램에서 응답이없는 RabbitMQ 검색 및 처리

그런 다음 RabbitMQ의 차단 된 연결 알림 기능을 사용하여 도움이 될 것이라고 생각했습니다. 그러나 IServiceBus에있는 연결 개체를 가져 오는 방법을 알 수 없습니다. 지금까지 시도했습니다

_serviceBus = serviceBus; 
     var connection = 
      ((MassTransit.Transports.RabbitMq.RabbitMqEndpointAddress) _serviceBus.Endpoint.Address) 
       .ConnectionFactory.CreateConnection(); 
     connection.ConnectionBlocked += Connection_ConnectionBlocked; 
     connection.ConnectionUnblocked += Connection_ConnectionUnblocked; 

그러나이 작업을 수행 할 때 이해할 수없는 BrokerUnreachableException이 발생합니다.

제 질문은 이것이 시간 초과를 감지하고 실패한 것입니다 (우리는 메시지의 데이터를 수집하고 나중에 재 게시하는 백업 메커니즘을 가지고 있습니다). 이것이 올바른지 어떻게 알 수 있습니까?

+0

우리는 다른 모든 서비스가 사가를 사용하여 매분마다 등록 메시지를 보내고 나중에 핑을받을 수있는 서비스를 제공합니다. 어떤 이유에서 건 응답이 없으면 서비스 상태를 "작동 중지"로 설정하고보아야하는 사람에게 전자 메일을 보냅니다. 이것은 설명했던 것을 포함하여 많은 문제를 해결합니다. –

답변

0

System.Timer 또는 Observable.Timer을 조합하여 검사를 예약하고 요청 - 응답을 사용하여 검사 할 수 있다고 생각합니다. 요청에 대한 소비자는 동일한 프로세스 내에 있어야합니다. Request 호출에 대해 합당한 시간 초과가있는 취소 토큰을 지정할 수 있으며 메시징 인프라가 다운되었거나 너무 사용량이 많거나 끝 점이 너무 많습니다.

관련 문제