이 페이지에서는 Spring Framework로 빌드된 Java 애플리케이션에서 Pub/Sub를 사용하는 방법을 설명합니다.
Spring Cloud GCP에는 Spring Framework를 사용하여 Pub/Sub 구독에서 메시지를 수신하고 Pub/Sub 주제로 메시지를 전송하기 위한 몇 가지 모듈이 포함되어 있습니다. 이러한 모듈은 여러 사용 사례에 맞게 개별적으로 또는 결합된 형태로 사용할 수 있습니다.
- Spring Cloud GCP Pub/Sub Starter를 사용하면 도우미 클래스를 사용하여 메시지를 송수신하고 고급 시나리오를 위해 Pub/Sub Java 클라이언트 라이브러리를 호출할 수 있습니다.
- Pub/Sub를 위한 Spring 통합 채널 어댑터를 사용하면 Spring 통합 메시지 채널을 Pub/Sub와 연결할 수 있습니다.
- Pub/Sub를 위한 Spring Cloud Stream Binder를 사용하면 Spring Cloud Stream 애플리케이션에서 Pub/Sub를 메시징 미들웨어로 사용할 수 있습니다.
참고: Spring Cloud GCP 라이브러리에서는 Java 클라이언트 라이브러리를 사용하여 1회만 구현하는 기능을 구현하는 데 필요한 모듈인 AckReplyConsumerWithResponse에 대해 액세스 권한을 제공하지 않습니다.
시작하기 전에
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Set up a Google Cloud console project.
Click to:
- Create or select a project.
- Enable the Pub/Sub API for that project.
- Create a service account.
- Download a private key as JSON.
You can view and manage these resources at any time in the Google Cloud console.
-
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
to the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again. -
Set up a Google Cloud console project.
Click to:
- Create or select a project.
- Enable the Pub/Sub API for that project.
- Create a service account.
- Download a private key as JSON.
You can view and manage these resources at any time in the Google Cloud console.
-
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
to the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again. GOOGLE_CLOUD_PROJECT
환경 변수를 Google Cloud 프로젝트 ID로 설정합니다.
Spring Cloud GCP Pub/Sub Starter 사용
Spring Cloud GCP Pub/Sub Starter 모듈은 Spring Cloud GCP Pub/Sub 모듈을 사용하여 Pub/Sub Java 클라이언트 라이브러리를 설치합니다. Spring Cloud GCP Pub/Sub Starter가 제공하는 클래스 또는 Pub/Sub Java 클라이언트 라이브러리를 사용하여 Spring 애플리케이션에서 Pub/Sub API를 호출할 수 있습니다. Spring Cloud GCP Pub/Sub Starter가 제공하는 클래스를 사용하는 경우 기본 Pub/Sub 구성을 무효화할 수 있습니다.
모듈 설치
Spring Cloud GCP Pub/Sub Starter 모듈을 설치하려면 해당 종속 항목을 pom.xml
파일에 추가합니다.
Spring Cloud GCP Pub/Sub Starter 아티팩트:
지원되는 작업
Spring Cloud GCP Pub/Sub Starter 모듈에는 다음 클래스가 포함되어 있습니다.
- 관리 작업을 위한
PubSubAdmin
:- 주제 및 구독을 만듭니다.
- 주제 및 구독을 가져옵니다.
- 주제 및 구독을 나열합니다.
- 주제 및 구독을 삭제합니다.
- 구독에 대한 확인 기한을 가져오고 설정합니다.
- 메시지 송신 및 수신을 위한
PubSubTemplate
:- 주제에 메시지를 게시합니다.
- 구독에서 동기식으로 메시지를 가져옵니다.
- 구독에서 비동기식으로 메시지를 가져옵니다.
- 메시지를 확인합니다.
- 확인 기한을 수정합니다.
- Pub/Sub 메시지를 일반 구형 자바 객체(POJO)로 변환합니다.
Spring Integration 채널 어댑터 사용
Spring 애플리케이션에 Spring 통합 메시지 채널이 사용되는 경우 채널 어댑터를 사용하여 메시지 채널과 Pub/Sub 사이에 메시지를 라우팅할 수 있습니다.
- 인바운드 채널 어댑터는 Pub/Sub 구독에서 메시지 채널로 메시지를 전달합니다.
- 아웃바운드 채널 어댑터는 메시지 채널에서 Pub/Sub 주제로 메시지를 게시합니다.
모듈 설치
Spring 통합 채널 어댑터에 대해 모듈을 설치하려면 pom.xml
파일에 다음을 추가합니다.
Spring Cloud GCP Pub/Sub Starter 및 Spring 통합 코어 아티팩트:
Pub/Sub에서 메시지 수신
Spring 애플리케이션에서 Pub/Sub 구독으로부터 메시지를 수신하려면 인바운드 채널 어댑터를 사용합니다. 인바운드 채널 어댑터는 수신되는 Pub/Sub 메시지를 POJO로 변환하고 POJO를 메시지 채널로 전달합니다.
위 예시에서는 다음 Spring bean 및 Pub/Sub 리소스가 사용됩니다.
- 이름이
inputMessageChannel
인 메시지 채널 bean - 이름이
inboundChannelAdapter
이고 유형이PubSubInboundChannelAdapter
인 인바운드 채널 어댑터 bean - 이름이
sub-one
인 Pub/Sub 구독 ID
inboundChannelAdapter
는 PubSubTemplate
를 사용하여 sub-one
에서 메시지를 비동기식으로 가져오고 메시지를 inputMessageChannel
로 전송합니다.
inboundChannelAdapter
는 애플리케이션이 메시지 처리 후 이를 확인할 수 있도록 확인 모드를 MANUAL
로 설정합니다. PubSubInboundChannelAdapter
유형의 기본 확인 모드는 AUTO
입니다.
ServiceActivator
bean messageReceiver
는 inputMessageChannel
에서 도착하는 각 메시지를 표준 출력에 로깅한 후 메시지를 확인합니다.
Pub/Sub에 메시지 게시
메시지 채널에서 Pub/Sub 주제에 메시지를 게시하려면 아웃바운드 채널 어댑터를 사용합니다. 아웃바운드 채널 어댑터는 POJO를 Pub/Sub 메시지로 변환한 후 메시지를 Pub/Sub 주제로 전송합니다.
위 예시에서는 다음 Spring bean 및 Pub/Sub 리소스가 사용됩니다.
- 이름이
inputMessageChannel
인 메시지 채널 bean - 이름이
messageSender
이고 유형이PubSubMessageHandler
인 아웃바운드 채널 어댑터 bean - 이름이
topic-two
인 Pub/Sub 주제 ID
ServiceActivator
bean은 messageSender
의 논리를 inputMessageChannel
의 각 메시지에 적용합니다.
messageSender
의 PubSubMessageHandler
는 PubSubTemplate
을 사용하여 inputMessageChannel
의 메시지를 게시합니다. PubSubMessageHandler
는 메시지를 Pub/Sub 주제 topic-two
에 게시합니다.
Spring Cloud Stream Binder 사용
Spring Cloud Stream 애플리케이션에서 Pub/Sub API를 호출하려면 Spring Cloud GCP Pub/Sub Stream Binder 모듈을 사용합니다.
모듈 설치
Spring Cloud Stream Binder 모듈을 설치하려면 pom.xml
파일에 다음을 추가합니다.
Spring Cloud Stream Binder 아티팩트:
Pub/Sub에서 메시지 수신
애플리케이션을 이벤트 싱크로 사용하려면 다음을 지정하여 입력 바인더를 구성합니다.
메시지 처리 논리를 정의하는
Consumer
bean. 예를 들어 다음Consumer
bean은 이름이receiveMessageFromTopicTwo
입니다.구성 파일
application.properties
의 Pub/Sub 주제 ID. 예를 들어 다음 구성 파일은topic-two
라는 Pub/Sub 주제 ID를 사용합니다.
이 예시 코드는 Pub/Sub에서 메시지를 수신합니다. 이 예시는 다음을 수행합니다.
application.properties
의 입력 바인딩 대상에서 Pub/Sub 주제 IDtopic-two
를 찾습니다.topic-two
에 대해 Pub/Sub 구독을 만듭니다.- 바인딩 이름
receiveMessageFromTopicTwo-in-0
을 사용하여receiveMessageFromTopicTwo
라는Consumer
bean을 찾습니다. - 수신 메시지를 표준 출력으로 출력하고 이를 자동으로 확인합니다.
Pub/Sub에 메시지 게시
애플리케이션을 이벤트 소스로 사용하려면 다음을 지정하여 출력 바인더를 구성합니다.
애플리케이션 내에서 메시지가 수신되는 위치를 정의하는
Supplier
bean. 예를 들어 다음Supplier
bean은 이름이sendMessageToTopicOne
입니다.구성 파일
application.properties
의 Pub/Sub 주제 ID. 예를 들어 다음 구성 파일은topic-one
라는 Pub/Sub 주제 ID를 사용합니다.
이 예시 코드는 Pub/Sub에 메시지를 게시합니다. 이 예시는 다음을 수행합니다.
application.properties
의 출력 바인딩 대상에서 Pub/Sub 주제 IDtopic-one
를 찾습니다.- 바인딩 이름
sendMessageToTopicOne-out-0
을 사용하여sendMessageToTopicOne
라는Supplier
bean을 찾습니다. - 10초마다
topic-one
으로 번호가 지정된 메시지를 전송합니다.