Azure에서 PUBSUB를 사용하는 데 문제가 있습니다.
Azure 방화벽은 일정 시간 동안 유휴 상태 인 연결을 닫습니다. 시간의 길이는 많은 논란의 여지가 있지만 사람들은 5-15 분 정도라고 생각합니다.
Redis를 메시지 큐로 사용하고 있습니다. 이를 위해 ServiceStack.Redis 라이브러리는 다음 채널을 구독하는 RedisMqServer를 제공합니다.
mq:topic:in
백그라운드 스레드에서는 소켓에서 데이터 수신을 차단하고 Redis에서 메시지를 수신하기를 기다립니다. 문제는:
Redis 메시지를 기다리는 소켓이 일정 시간 동안 유휴 상태이면 Azure 방화벽이 연결을 자동으로 닫습니다. 내 응용 프로그램은 현재 닫힌 연결을 기다리고 있으므로 인식하지 못합니다. 백그라운드 스레드가 효과적으로 중단됩니다.
나는 1 분 동안 메시지를 기다리는 일종의 Keep Alive를 구현하려고 생각했지만 하나가 수신되지 않으면 두 가지 목표로 서버를 PING합니다.
그러나 이것을 구현했을 때 구독하는 동안 PING 명령을 사용할 수 없다는 것을 알았습니다.? 왜 그런지 잘 모르겠지만 대체 솔루션이있는 사람이 있습니까?
나는 메시지를 놓칠 수 있으므로 구독을 취소하고 정기적으로 다시 구독하고 싶지 않습니다.
다음 기사를 읽었습니다. http://blogs.msdn.com/b/cie/archive/2014/02/14/connection-timeout-for-windows-azure-cloud-service-roles-web-worker.aspx Azure Load Balancer가 4 분 후 연결을 해제하는 방법에 대해 설명합니다. 그러나 연결을 계속 유지할 수 있더라도 다른 이유로 연결이 끊어지면 구독을 다시 시작하는 두 번째 목표를 달성해야합니다 (redis 노드가 다운 됨).
unstable
이 커밋에서 Redis 브랜치의 Pub / Sub 모드에서 PING 지원을 구현했습니다 . https://github.com/antirez/redis/commit/27839e5ecb562d9b79e740e2e20f7a6db7270a66
이것은 다음 날 Redis 2.8 안정으로 백 포트 될 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다