복붙노트

[REDIS] blpop 잠시 후 처리 큐 정지

REDIS

blpop 잠시 후 처리 큐 정지

내 조직에서, 우리는 우리의 중요한 작업 장소에서 레디 스 노동자의 숫자가 있습니다. 일반적으로 하루에 한 번 또는 두 번에, 우리 노동자는 큐 처리를 중지.

코드는 기본적으로 다음과 같습니다 :

while ($item = $redis->blpop(array('someQueue', 'anotherQueue'), 3600)) {
    someFunction();
}

당신이 볼 경우, 코드의 관점에서 어떤 일이 일어나고 그 정도가 아니지만, 모든 한 동안, 큐는 구축 시작하고 작업자는 대기열에서 항목을 팝업하지 않습니다. 우리는 문제가 레디 스 클라이언트 연결 것을 가정하기 때문에 blpop에 대한 시간 제한을 설정하는 것은 전혀 도움이되지 않습니다.

지금이 순간, 우리는 우리가 큐가 축적 경고 몇 리스너를 설정 한 후, 우리는 노동자하지만 여전히 문제이 지속를 다시 시작합니다. 우리는 또한 우리의 레디 스 클라이언트에 대한 시간 제한을 설정할 수 있습니다,하지만 다시는 이상적인 솔루션이 아닙니다.

우리의 질문은 BLPOP을 사용하여 오류를 레디 스를 사용하여 메시지 큐를 구현하는 오류 유사하지만, 우리는 오류를하지 않습니다. 작업자는 갑자기 멈 춥니 다.

정보

레디 스 서버 : 2.8.2

PHP는 phpredis을 반환

오랜 시간 동안 실행 된 노동자는 큐를 처리 중지되었습니다. 클라이언트 목록을 실행 한 후 우리는 이러한 노동자 나머지에 비해 높은 유휴 시간을 가지고 자신의 플래그가 N 대신 B로 설정되어 것으로 나타났습니다. 이 뒤에 이유 무엇을 할 수 있는가?

문제가 된 SomeFuncion로했다 (). 클라이언트가 오랜 시간 따라서 클라이언트 목록을 실행에 'N'플래그 공회전되었다 인한되는 컨트롤을 반환하지 않도록하는 기능을 일으키는 코드의 조각이 있었다.

해결법

  1. ==============================

    1.이 문제이며, 당신이 뭔가 서버 쪽을 찾으면 문제로 레디 스 프로젝트 문제 등을보고 있을지 확인하는 것이 좋습니다. 그러나 다음 단계는 (어떤 사람 위의 유사한 문제가 알려져 있기 때문에, 가능성이) 당신도 당신의 스택의 다른 부분에있는 경우 문제를 해결하지하는 데 도움이 될 것입니다.

    이 문제이며, 당신이 뭔가 서버 쪽을 찾으면 문제로 레디 스 프로젝트 문제 등을보고 있을지 확인하는 것이 좋습니다. 그러나 다음 단계는 (어떤 사람 위의 유사한 문제가 알려져 있기 때문에, 가능성이) 당신도 당신의 스택의 다른 부분에있는 경우 문제를 해결하지하는 데 도움이 될 것입니다.

    무슨 일이 일어나고 있는지 확인하는 단계 :

    임의의 말 :

  2. ==============================

    2.우리는 다른 문제를 거라고 : 응용 프로그램 서버가 잠시 레디 스 서버와의 연결이 끊긴 경우, 레디 스 핸들이 무효 (BTW, 우리가 기대 -이 버그가 아닙니다)가된다. 문제가 다르지만, 우리 주위의 작품뿐만 아니라 당신을 위해 힘 작업을 사용 :

    우리는 다른 문제를 거라고 : 응용 프로그램 서버가 잠시 레디 스 서버와의 연결이 끊긴 경우, 레디 스 핸들이 무효 (BTW, 우리가 기대 -이 버그가 아닙니다)가된다. 문제가 다르지만, 우리 주위의 작품뿐만 아니라 당신을 위해 힘 작업을 사용 :

    당신이 뭔가를 할 수 있습니다 :

    while (true) {
        // The factory method below will check whether handle is valid. If not, create a new one and return
        $redis = MyRedisFactory::getInstance(); 
        $item = $redis->blpop(array('someQueue', 'anotherQueue'), 3600);
        someFunction();
    }
    
  3. from https://stackoverflow.com/questions/27540147/blpop-stops-processing-queue-after-a-while by cc-by-sa and MIT license