... 또는 zmq가 연결을 끊은 클라이언트를 어떻게 처리합니까? 클라이언트가 연결을 끊었을 때 메시지를 계속 수신 할 수있는 대기열에 일종의 시간 초과가 있습니까?RabbitMQ의 "x-expires"인수의 ZeroMQ eqivillent는 무엇입니까?
2
A
답변
2
참조 : http://api.zeromq.org/2-1:zmq-setsockopt
ZMQ 소켓이 높은 물 마크의 개념을 가지고있다. 워드 프로세서
: - 차단 메시지의 전송하거나 떨어지면 그것은 행동의에 zmq 소켓의 각 유형에 대해
The high water mark is a hard limit on the maximum number of outstanding messages ØMQ shall
queue in memory for any single peer that the specified socket is communicating with.
If this limit has been reached the socket shall enter an exceptional state and depending on
the socket type, ØMQ shall take appropriate action such as blocking or dropping sent messages.
은 (REQ는, REP, PUB, SUB 등)를 사용하면 문서를 확인할 수 있습니다.
대부분 클라이언트가 연결을 끊으면 메시지가 삭제됩니다. 이것이 중요한 경우 ZMQ 패턴 위에 메시지 지속성 및 안정성을 구축해야합니다.
1
사용할 수있는 몇 가지 전략이 있으며 필요에 따라 다릅니다 (아무도 대답이 없습니다).
일반적으로 클라이언트의 연결이 끊어지면 서버 측의 큐가 삭제됩니다. PUB에서 SUB 로의 흐름과 PUSH에서 PULL 로의 흐름은 마찬가지입니다.
자주 연결 해제를 처리하려면 ROUTER-DEALER를 사용하고 연결에 ID를 설정하십시오 (연결하기 전에 DEALER 쪽에서). 그러면 ROUTER가 사라지고 다시 돌아 오더라도 딜러는 메시지를 대기열에 넣습니다. 그런 다음 HWM을 사용하여 해당 큐의 크기를 제한 할 수 있습니다.
타임 아웃을 원한다면 ZeroMQ가 메시지를 영원히 유지하거나 대기열에 놓을 수없는 경우 즉시 삭제할 수 있기 때문에 좀 더 까다 롭습니다. 서버의 자체 목록 구조에 메시지를 대기열에두고 HWM을 1로 설정하고 비 차단 송신을 사용하여 대기열에서 공간을 확보해야합니다. 그런 다음 클라이언트를 만료시키고 연관된 대기열을 삭제할 수 있습니다. 일하는 것 같지만 꽤 간단합니다.