주제에 게시된 메시지를 받으려면 해당 주제에 대한 구독을 생성해야 합니다. 구독자 클라이언트는 구독이 생성된 이후에 주제에 게시된 메시지만 사용할 수 있습니다. 구독자 클라이언트는 주제에 게시된 메시지를 수신하고 처리합니다. 한 주제에 여러 구독이 존재할 수 있지만, 한 구독은 하나의 주제에만 연결됩니다.
주제 보관 기능을 사용하면 주제에 연결된 구독이 이전 시간에서 찾고 이전에 게시된 메시지를 재생할 수 있습니다. 메시지 재생 및 삭제 주제에서 이 기능에 대해 자세히 알아보세요.
구독 워크플로
메시지가 구독자에게 전달되면 구독자는 메시지를 확인해야 합니다.
전달되었지만 아직 구독자가 확인하지 않은 메시지를 대기 상태라고 합니다.
Pub/Sub는 아직 확인되지 않은 메시지를 전달하기 위해 반복해서 시도합니다. 하지만 Pub/Sub는 동일한 구독에서 다른 구독자에게 대기 중인 메시지를 전달하려 시도하지 않습니다.
구독자는 대기 중인 메시지를 확인하기 위한
ackDeadline이라고 하는 구성 가능하며 제한된 시간을 갖습니다. 기한이 지나면 메시지는 더 이상 대기 상태로 간주되지 않으며 Pub/Sub에서는 메시지를 다시 전송하려고 합니다.
구독 유형
구독을 만들 때 메시지 전송 유형을 지정해야 합니다. Pub/Sub는 다음 구독 유형을 제공합니다.
풀 구독은 구독자 클라이언트를 사용하여 Pub/Sub 서버에서 메시지를 요청합니다.
푸시 구독은 Pub/Sub 서버를 사용하여 구독자 애플리케이션에 메시지 전송을 요청합니다.
내보내기 구독은 메시지를 Google Cloud리소스로 직접 내보냅니다. 이러한 구독에는 다음이 포함됩니다.
BigQuery 구독은 BigQuery 테이블로 데이터를 내보냅니다.
Cloud Storage 구독은 Cloud Storage 버킷으로 데이터를 내보냅니다.
비즈니스 요구사항에 맞는 올바른 구독을 선택하려면 구독 유형 선택을 참조하세요. 구독을 만든 후 언제든지 구독의 메시지 전송 유형을 업데이트할 수 있습니다.
기본 구독 속성
기본적으로 Pub/Sub는 모든 구독 유형에 대해 순서에 관계없이 최소 1회 전송을 제공합니다. 또는 메시지에 동일한 순서 키가 있고 메시지가 동일한 리전에 있다면 메시지 순서를 사용할 수 있습니다. 메시지 순서 속성을 설정하면 Pub/Sub 서비스에서 동일한 순서 키를 사용해 Pub/Sub 서비스가 메시지를 수신하는 순서대로 메시지를 전송합니다.
Pub/Sub는 1회만 전송도 지원합니다.
일반적으로 Pub/Sub는 각 메시지를 게시된 순서대로 1회 전달합니다. 하지만 간혹 메시지가 순서대로 전달되지 않거나 여러 번 전달되기도 합니다. Pub/Sub가 메시지에 대한 확인 요청이 성공적으로 반환된 후에도 메시지를 다시 전송할 수 있습니다. 이러한 재전송은 서버 측 다시 시작 등의 문제나 클라이언트 측 문제로 인해 발생할 수 있습니다. 따라서 드물지만 언제든 아무 메시지나 다시 전송될 수 있습니다.
전송을 1회 이상 수용하려면 메시지를 처리할 때 구독자에게 멱등성이 있어야 합니다.
구독 만료
기본적으로, 구독은 31일 동안 구독자가 활동이 없거나 구독이 업데이트되지 않은 경우에 만료됩니다. 구독자 활동 예시에는 연결 열기, 활성 풀 또는 성공한 push가 있습니다. Pub/Sub가 구독자 활동 또는 구독 속성의 업데이트를 감지하면 구독 삭제 시계가 다시 시작됩니다. 구독 만료 정책을 사용하면 비활동 기간을 구성하거나 활동에 관계없이 구독 기간을 무한대로 설정할 수 있습니다. 구독 수동 삭제도 가능합니다.
삭제된 구독과 동일한 이름으로 새 구독을 생성할 수 있지만 생성한 새 구독은 이전 구독과 아무 관련이 없습니다. 삭제한 구독에 확인하지 않은 메시지가 많이 있더라도 동일한 이름으로 생성된 새 구독은 생성 시점에 백로그가 없을 것입니다(전달 대기 중인 메시지가 없음).