영구 연결
원문 URL: https://docs.bullmq.io/bull/patterns/persistent-connections
영구 연결
섹션 제목: “영구 연결”마이크로서비스 아키텍처에서 서브시스템의 핵심 기능 중 하나는, 다른 서비스와의 연결이 끊겨도 이를 자동으로 처리하고 서비스가 실행되는 동안 가능한 한 오랫동안 연결을 유지하는 것입니다.
예를 들어, 서비스가 데이터베이스에 연결되어 있는데 해당 데이터베이스 연결이 끊어진다면, 서비스가 이 단절을 최대한 안정적으로 처리하고 데이터베이스가 다시 온라인 상태가 되는 즉시 사람의 개입 없이 계속 동작하길 원할 것입니다.
Bull은 Redis 접근에 ioredis를 사용하므로, 기본값은 무기한 자동 재연결입니다. 이 동작은 커스터마이즈할 수 있지만, 현재로서는 기본값이 가장 좋은 설정일 가능성이 큽니다: https://github.com/luin/ioredis#auto-reconnect
Bull의 맥락에서는 일반적으로 서로 다르게 처리되는 두 가지 경우가 있습니다.
Workers
섹션 제목: “Workers”worker는 가능한 한 빠르게 큐의 작업을 소비합니다. Redis 연결이 끊기면 Redis를 다시 사용할 수 있을 때까지 worker가 “대기”하기를 원합니다. 이를 위해 Redis 옵션(ioredis가 처리함)에서 중요한 설정 하나를 이해해야 합니다.
maxRetriesPerRequest
섹션 제목: “maxRetriesPerRequest”이 설정은 ioredis 클라이언트가 실패한 명령에 대해 오류를 던지기 전에 몇 번 재시도할지를 지정합니다. 즉, Redis에 도달할 수 없거나 오프라인이어도 이 상황이 바뀌거나 최대 시도 횟수에 도달할 때까지 명령을 재시도합니다.
Bull에서는 각각 workers와 events에 사용되는 “bclient” 및 “eclient” 연결 모두에 대해 이 설정을 null로 지정합니다.
이렇게 하면 동작 가능한 연결이 있는 한 worker가 계속해서 영구적으로 처리할 수 있습니다. Redis 클라이언트를 수동으로 생성하는 경우, 이 설정이 null로 되어 있지 않으면 Bull이 예외를 발생시킵니다.
Queue
섹션 제목: “Queue”작업 추가, 일시 중지, getter 사용 등 큐 관리를 위한 단순 Queue 인스턴스는 일반적으로 worker와 다른 요구사항을 가집니다.
예를 들어, HTTP endpoint 호출의 결과로 큐에 작업을 추가한다고 해봅시다. 이 endpoint의 호출자는 호출 시점에 Redis 연결이 다운되어 있다고 해서 무기한 기다릴 수는 없습니다.
따라서 maxRetriesPerRequest 설정은 기본값(현재 20)으로 두거나, 사용자에게 빠르게 오류를 반환하고 나중에 재시도할 수 있도록 1 같은 다른 값으로 설정해야 합니다.