2013-12-13 6 views
5

서비스 스택의 RedisClient의 BlockingDequeue를 사용하여 처리 할 수있을 때까지 일부 데이터를 유지합니다. 호출 코드는서비스 스택 Redis 서버 다시 부팅 후 다시 연결

using (var client = ClientPool.GetClient()) 
      return client.As<TMessage>().Lists[_channel].BlockingDequeue(timeout); 

처럼 레디 스를 호스팅하는 서버를 다시 시작하면 BlockingDequeue에 대한 연결이 좀비를 이동 결코 클라이언트 응용 프로그램을 다시 시작할 때까지 돌아 본다.

BlockingDequeue 및 PooledConnectionManager에 대한 시간 제한 설정을 시도했지만 도움이되지 않았습니다. 서버 쪽에서 제한 시간이 적용되기 때문에 추측하고 있습니다.

이러한 유형의 내결함성이 서비스 스택에 내장되어 있으며 누락 되었습니까?

아니면 우리 구현에서 처리해야 할 부분입니까? 그렇다면 권장되는 접근법이 있습니까?

답변

1

ServiceStack.Redis 구독 코드에서 동일한 문제가 발생했습니다. retrycount, retrytimeout 등과 같은 몇 가지 설정을 시도했지만 어느 것도 작동하지 않았습니다. 나중에 해결 방법은 RedisException을 catch하고 다시 구독하는 것입니다.

관련 문제