RabbitMQ 소비자 스크립트에서는 RabbitMQ 서버에 대한 연결이 끊어지는 시기를 감지하는 것이 중요합니다. 그렇지 않으면 소비자가 메시지 수신에 실패하거나 무한정 계속 실행될 수도 있습니다.
RabbitMQ 소비자 스크립트에 사용되는 Streadway/amqp 라이브러리는 연결을 유지하려고 시도하는 하트비트 메커니즘을 제공합니다. 그러나 하트비트 간격에만 의존하는 것만으로는 끊긴 연결을 안정적으로 감지하는 데 충분하지 않을 수 있습니다.
대신 amqp.Connection 객체의 NotifyClose() 메서드를 사용하는 것이 더 강력한 접근 방식입니다. 이 메소드는 전송 또는 프로토콜 오류가 발생할 때 신호를 보내는 채널을 반환합니다.
import "github.com/rabbitmq/amqp091-go" func main() { conn, err := amqp.Dial(...) notify := conn.NotifyClose(make(chan *amqp.Error)) ... }
주 기능 내에서 연결이 설정되거나 다시 설정될 때마다 새 알림 채널을 생성하고 선택을 시작해야 합니다. 오류 채널과 메시지 채널을 모두 모니터링하는 명령문입니다. 오류 채널에서 오류가 수신되면 이는 연결이 끊어졌음을 의미하며 스크립트는 다시 연결을 시도해야 합니다.
다음은 이 재연결 루프를 구현하는 방법에 대한 예입니다.
for { conn, _ := amqp.Dial(...) notify := conn.NotifyClose(make(chan *amqp.Error)) ch, _ := conn.Channel() msgs, _ := ch.Consume(...) for { select { case err := <-notify: // Handle connection error and reconnect case d := <-msgs: // Handle incoming message } } }
NotifyClose()를 사용하여 연결의 오류 채널을 지속적으로 모니터링하면 소비자 스크립트가 응답성을 유지하고 연결 실패를 정상적으로 처리하는지 확인할 수 있습니다. 이렇게 하면 스크립트가 필요할 때 RabbitMQ 서버에 자동으로 다시 연결되어 메시지가 누락되거나 조기에 중단될 위험이 줄어듭니다.
위 내용은 Go 소비자는 어떻게 죽은 RabbitMQ 연결을 안정적으로 감지하고 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!