[REDIS] blpop 잠시 후 처리 큐 정지
REDISblpop 잠시 후 처리 큐 정지
내 조직에서, 우리는 우리의 중요한 작업 장소에서 레디 스 노동자의 숫자가 있습니다. 일반적으로 하루에 한 번 또는 두 번에, 우리 노동자는 큐 처리를 중지.
코드는 기본적으로 다음과 같습니다 :
while ($item = $redis->blpop(array('someQueue', 'anotherQueue'), 3600)) {
someFunction();
}
당신이 볼 경우, 코드의 관점에서 어떤 일이 일어나고 그 정도가 아니지만, 모든 한 동안, 큐는 구축 시작하고 작업자는 대기열에서 항목을 팝업하지 않습니다. 우리는 문제가 레디 스 클라이언트 연결 것을 가정하기 때문에 blpop에 대한 시간 제한을 설정하는 것은 전혀 도움이되지 않습니다.
지금이 순간, 우리는 우리가 큐가 축적 경고 몇 리스너를 설정 한 후, 우리는 노동자하지만 여전히 문제이 지속를 다시 시작합니다. 우리는 또한 우리의 레디 스 클라이언트에 대한 시간 제한을 설정할 수 있습니다,하지만 다시는 이상적인 솔루션이 아닙니다.
우리의 질문은 BLPOP을 사용하여 오류를 레디 스를 사용하여 메시지 큐를 구현하는 오류 유사하지만, 우리는 오류를하지 않습니다. 작업자는 갑자기 멈 춥니 다.
정보
레디 스 서버 : 2.8.2
PHP는 phpredis을 반환
오랜 시간 동안 실행 된 노동자는 큐를 처리 중지되었습니다. 클라이언트 목록을 실행 한 후 우리는 이러한 노동자 나머지에 비해 높은 유휴 시간을 가지고 자신의 플래그가 N 대신 B로 설정되어 것으로 나타났습니다. 이 뒤에 이유 무엇을 할 수 있는가?
문제가 된 SomeFuncion로했다 (). 클라이언트가 오랜 시간 따라서 클라이언트 목록을 실행에 'N'플래그 공회전되었다 인한되는 컨트롤을 반환하지 않도록하는 기능을 일으키는 코드의 조각이 있었다.
해결법
-
==============================
1.이 문제이며, 당신이 뭔가 서버 쪽을 찾으면 문제로 레디 스 프로젝트 문제 등을보고 있을지 확인하는 것이 좋습니다. 그러나 다음 단계는 (어떤 사람 위의 유사한 문제가 알려져 있기 때문에, 가능성이) 당신도 당신의 스택의 다른 부분에있는 경우 문제를 해결하지하는 데 도움이 될 것입니다.
이 문제이며, 당신이 뭔가 서버 쪽을 찾으면 문제로 레디 스 프로젝트 문제 등을보고 있을지 확인하는 것이 좋습니다. 그러나 다음 단계는 (어떤 사람 위의 유사한 문제가 알려져 있기 때문에, 가능성이) 당신도 당신의 스택의 다른 부분에있는 경우 문제를 해결하지하는 데 도움이 될 것입니다.
무슨 일이 일어나고 있는지 확인하는 단계 :
임의의 말 :
-
==============================
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(); }
from https://stackoverflow.com/questions/27540147/blpop-stops-processing-queue-after-a-while by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] AWS 람다와 레디 스 클라이언트. 이유는 콜백을 호출 할 수 없습니다? (0) | 2020.01.25 |
---|---|
[REDIS] 비동기 AOF fsync를 너무 오래 (디스크가 사용 중이?)하고있다. 전체에 fsync를 기다리지 않고 AOF 버퍼를 작성,이 레디 스 느려질 수 있습니다 (0) | 2020.01.25 |
[REDIS] 레디 스 + 도커 + 장고 - 오류 111 연결 거부 (0) | 2020.01.24 |
[REDIS] springboot2.0에서 @cacheable 사용하는 경우 어떻게 각 레디 스 캐시에 대해 다른 TTL을 구성 할 수 (0) | 2020.01.24 |
[REDIS] 스프링 데이터 레디 스 마스터 슬레이브 구성 (0) | 2020.01.24 |