이 페이지에서는 라이트 주제에 메시지를 게시하는 방법을 설명합니다. Java용 Pub/Sub 라이트 클라이언트 라이브러리를 사용하여 메시지를 게시할 수 있습니다.
메시지를 게시하고 라이트 주제에 라이트 구독을 만든 후 라이트 구독에서 메시지를 수신할 수 있습니다.
메시지 형식
메시지는 메시지 데이터 및 메타데이터가 있는 필드로 구성됩니다. 메시지에서 다음 중 하나를 지정합니다.
클라이언트 라이브러리는 메시지를 파티션에 자동으로 할당하고 Pub/Sub 라이트 서비스는 메시지에 다음 필드를 추가합니다.
- 파티션 내에서 고유한 메시지 ID
- Pub/Sub 라이트 서비스가 파티션에 메시지를 저장하는 경우의 타임스탬프
메시지 게시
메시지를 게시하려면 라이트 주제에 대한 스트리밍 연결을 요청한 다음 스트리밍 연결을 통해 메시지를 전송합니다.
다음 샘플은 라이트 주제에 메시지를 게시하는 방법을 보여줍니다.
gcloud
이 명령어를 사용하려면 Python 3.6 이상이 필요하며 grpcio Python 패키지를 설치해야 합니다. MacOS, Linux, Cloud Shell 사용자의 경우 다음을 실행합니다
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
메시지를 게시하려면 gcloud pubsub lite-topics publish 명령어를 사용합니다.
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA
다음을 바꿉니다.
- TOPIC_ID: 라이트 주제의 ID
- LITE_LOCATION: 라이트 주제의 위치
- MESSAGE_DATA: 메시지 데이터가 있는 문자열
Go
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Go 설정 안내를 따르세요.
Java
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Java 설정 안내를 따르세요.
Python
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Python 설정 안내를 따르세요.
클라이언트 라이브러리는 메시지를 비동기적으로 전송하고 오류를 처리합니다. 오류가 발생하면 클라이언트 라이브러리가 메시지를 다시 전송합니다.
- Pub/Sub 라이트 서비스가 스트림을 닫습니다.
- 클라이언트 라이브러리는 메시지를 버퍼링하고 라이트 주제에 대한 연결을 다시 설정합니다.
- 클라이언트 라이브러리는 메시지를 순서대로 보냅니다.
메시지를 게시하면 Pub/Sub 라이트 서비스가 메시지를 파티션에 저장하고 게시자에게 메시지 ID를 반환합니다.
순서 키 사용
메시지의 순서 키가 동일한 경우, 클라이언트 라이브러리는 메시지를 동일한 파티션에 할당합니다. 순서 키는 최대 1,024바이트의 문자열이어야 합니다.
순서 키는 메시지의 key
필드에 있습니다.
클라이언트 라이브러리를 사용하여 순서 키를 설정할 수 있습니다.
gcloud
이 명령어를 사용하려면 Python 3.6 이상이 필요하며 grpcio Python 패키지를 설치해야 합니다. MacOS, Linux, Cloud Shell 사용자의 경우 다음을 실행합니다
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
메시지를 게시하려면 gcloud pubsub lite-topics publish 명령어를 사용합니다.
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--ordering-key=ORDERING_KEY \
--message=MESSAGE_DATA
다음을 바꿉니다.
- TOPIC_ID: 라이트 주제의 ID
- LITE_LOCATION: 라이트 주제의 위치
- ORDERING_KEY: 파티션에 메시지 할당을 위해 사용되는 문자열
- MESSAGE_DATA: 메시지 데이터가 있는 문자열
Go
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Go 설정 안내를 따르세요.
Java
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Java 설정 안내를 따르세요.
Python
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Python 설정 안내를 따르세요.
순서 키를 사용하여 동일한 파티션에 여러 메시지를 보낼 수 있으므로 구독자는 메시지를 순서대로 수신합니다. 클라이언트 라이브러리는 동일한 파티션에 여러 순서 키를 할당할 수 있습니다.
이벤트 시간 설정
이벤트 시간을 사용하여 라이트 메시지를 게시할 수 있습니다. 이벤트 시간은 메시지에 추가할 수 있는 커스텀 속성입니다.
클라이언트 라이브러리 또는 gCloud CLI를 사용하여 이벤트 타임스탬프를 설정할 수 있습니다.
이 명령어를 사용하려면 Python 3.6 이상이 필요하며 grpcio Python 패키지를 설치해야 합니다. MacOS, Linux, Cloud Shell 사용자의 경우 다음을 실행합니다
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
메시지를 게시하려면 gcloud pubsub lite-topics publish 명령어를 사용합니다.
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--event-time=EVENT_TIME \
--message=MESSAGE_DATA
다음을 바꿉니다.
TOPIC_ID: 라이트 주제의 ID
LITE_LOCATION: 라이트 주제의 위치
EVENT_TIME: 사용자 지정 이벤트 시간. 시간 형식에 대한 자세한 내용은
gcloud topic datetimes
를 실행하세요.MESSAGE_DATA: 메시지 데이터가 있는 문자열
속성 사용
메시지 속성은 메시지에 대한 메타데이터가 있는 키-값 쌍입니다. 속성은 텍스트 또는 바이트 문자열일 수 있습니다.
속성은 메시지의 attributes
필드에 있습니다. 클라이언트 라이브러리로 속성을 설정할 수 있습니다.
gcloud
이 명령어를 사용하려면 Python 3.6 이상이 필요하며 grpcio Python 패키지를 설치해야 합니다. MacOS, Linux, Cloud Shell 사용자의 경우 다음을 실행합니다
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
메시지를 게시하려면 gcloud pubsub lite-topics publish 명령어를 사용합니다.
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA \
--attribute=KEY=VALUE,...
다음을 바꿉니다.
Go
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Go 설정 안내를 따르세요.
Java
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Java 설정 안내를 따르세요.
Python
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Python 설정 안내를 따르세요.
속성은 메시지를 처리하는 방법을 나타낼 수 있습니다. 구독자는 메시지의 attributes
필드를 파싱하고 그 속성에 따라 메시지를 처리할 수 있습니다.
메시지 일괄 처리
클라이언트 라이브러리는 메시지를 일괄 게시합니다. 일괄 처리는 컴퓨팅 리소스를 적게 사용하지만 지연 시간은 증가합니다. 일괄 처리 설정을 사용하여 배치 크기를 변경할 수 있습니다.
다음 표는 사용자가 구성할 수 있는 일괄 처리 설정의 목록입니다.
설정 | 설명 | 기본 |
---|---|---|
요청 크기 | 일괄 처리 최대 크기(바이트)입니다. | 3.5MiB |
메시지 수 | 일괄 처리 최대 메시지 수입니다. | 메시지 1,000개 |
게시 지연 | 메시지를 배치에 추가하고 라이트 주제로 배치를 전송하는 데 걸리는 시간(밀리초)입니다. | 50밀리초 |
클라이언트 라이브러리를 사용하여 일괄 처리 설정을 구성할 수 있습니다.
Go
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Go 설정 안내를 따르세요.
Java
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Java 설정 안내를 따르세요.
Python
이 샘플을 실행하기 전에 Pub/Sub Lite 클라이언트 라이브러리의 Python 설정 안내를 따르세요.
게시자 애플리케이션이 시작되면 클라이언트 라이브러리가 라이트 주제의 각 파티션에 대한 배치를 만듭니다. 예를 들어 라이트 주제에 파티션이 두 개 있는 경우 게시자는 두 개의 배치를 만들고 각 배치를 파티션으로 보냅니다.
메시지를 게시한 후 클라이언트 라이브러리는 배치가 최대 요청 크기, 최대 메시지 수 또는 게시 지연을 초과할 때까지 버퍼링합니다.
메시지 순서 지정
라이트 주제는 메시지를 게시할 때 각 파티션 내 메시지의 순서를 지정합니다. 동일한 파티션에 메시지를 할당하려면 순서 키를 사용합니다.
Pub/Sub Lite는 파티션에서 메시지를 순서대로 전달하고, 구독자는 메시지를 순서대로 처리할 수 있습니다. 자세한 내용은 메시지 수신을 참조하세요.
게시 멱등성
Pub/Sub 라이트 클라이언트 라이브러리는 다음 버전에서 게시 멱등성을 지원합니다.
- java-pubsublite: 버전 1.10.0
- python-pubsublite: 버전 1.8.0
- google-cloud-go: pubsublite 버전 1.7.0
네트워크 오류나 서버 오류로 인해 메시지 게시가 재시도되는 경우 정확히 한 번만 저장됩니다. 멱등성은 동일한 세션 내에서만 보장됩니다. 새 게시자 클라이언트를 사용하여 동일한 메시지를 다시 게시하는 경우 보장할 수 없습니다. 추가 서비스 비용이 발생하거나 게시 지연 시간이 늘어나지 않습니다.
게시 멱등성 사용 설정 또는 중지
게시 멱등성은 기본적으로 Pub/Sub 라이트 클라이언트 라이브러리에서 사용 설정됩니다. 각 클라이언트 라이브러리의 게시자 클라이언트 설정을 사용하여 이를 사용 중지할 수 있습니다.
게시 멱등성이 사용 설정된 경우 게시 결과에서 반환되는 오프셋은 -1
일 수 있습니다. 메시지가 이미 게시된 메시지의 중복으로 식별되었지만 게시 시점에 메시지의 오프셋을 반환할 정보가 서버에 충분하지 않은 경우 이 값이 반환됩니다.
구독자가 수신한 메시지에는 항상 유효한 오프셋이 있습니다.
문제 해결
중복 수신됨
멱등성은 단일 세션으로 제한되므로 동일한 메시지를 게시하도록 게시자 클라이언트를 다시 만들면 중복이 발생할 수 있습니다.
파티션이 Pub/Sub 라이트 서비스(기본 설정)에 의해 구독자에게 자동으로 할당되는 경우 구독자 클라이언트는 동일한 메시지를 여러 번 수신할 수 있습니다. 재할당이 발생하면 메시지가 다른 구독자 클라이언트로 다시 전송될 수 있습니다.
게시자 오류
게시자 세션의 상태는 7일 동안 활동이 없으면 서버에서 가비지로 수집됩니다. 이 기간이 지난 후 세션이 재개되면 게시자 클라이언트가 '실패한 전제조건: 게시 메시지의 시퀀스 넘버 지정이 필요합니다'와 같은 오류 메시지와 함께 종료되며 새 메시지를 허용하지 않습니다. 이 오류를 해결하려면 게시자 클라이언트를 다시 만드세요.