2017-01-09 7 views
1

TTL이 만료되면 (구독자 작업 스케줄러) 가입하려는 TTL을 가진 Redis 키가 있습니다.ServiceStack을 사용하여 분산 환경에서 Redis 키 공간 알림 구독

이것은 단일 호스트 환경에서 잘 작동하며 ServiceStack에서 Redis 클라이언트를 사용하여 '[email protected]__:expired'에 가입하면 해당 서비스가이를 선택하고 조치를 취합니다. 환상적입니다 ...

... 해당 클러스터에 둘 이상의 API 인스턴스가있는 고 가용성 토폴로지가 설정 될 때까지 .... 그런 다음 모든 단일 호스트가 해당 메시지를 받아 들여 잠재적으로이를 수행합니다.

키 스페이스 알림은 기존의 게시/하위 또는 메시징 레이어 이벤트와 정확히 동일하게 작동하지 않지만 이러한 종류의 이벤트에 대해 일종의 확인을 수행 할 수있는 방법이 있다는 것을 알고 있습니다. 하루 만에 하나의 호스트 만이 작업을 수행 할 수 있습니까?

그렇지 않으면 게시하는 메시지를 지연시킬 수있는 방법이 있습니까?

감사합니다.

답변

1

내 질문에 대한 이해 : 키가 만료 될 때마다 유니 캐스트 이벤트 알림이 필요합니다.

위의 가정이 맞으면이 해결책이 도움이 될 것입니다. 그것은 일종의 원유 솔루션이지만 작동합니다!

솔루션 : 은 어떻게 든 당신은 레디 스 목록/큐을 사용하고 어떻게 든 레디 스 목록에서 만료 된 키를 넣어해야합니다. 그렇다면이 목록의 B * POP 작업을 차단하면 원하는 것을 얻을 수 있습니다!

어떻게 작동합니까? 단일 백그라운드 스레드가 만료 된 키를 연속적으로 재 다이얼 목록/대기열로 푸시한다고 가정 해 봅시다. API 인스턴스의 클러스터는이 목록/대기열에서 차단 팝업을 호출합니다.

redis 목록의 각 항목에 팝업 차단 작업이 하나의 클라이언트에서만 사용되므로 하나의 API 인스턴스 만 만료 된 키를 알립니다.

참조 :

목록 팝업 작업 : 술집/서브와 https://redis.io/commands/lpop

유사 문제 : Competing Consumer on Redis Pub/Sub supported?