Pub/Sub 메시지 쓰기 및 응답

리전 ID

REGION_ID는 앱을 만들 때 선택한 리전을 기준으로 Google이 할당하는 코드입니다. 기존 앱은 App Engine URL에 REGION_ID.r을 포함하는 것이 선택사항이고, 신규 앱은 모두 곧 필수가 될 예정입니다.

원활한 전환을 위해 리전 ID를 사용하도록 App Engine을 천천히 업데이트하고 있습니다. 아직 Google Cloud 프로젝트가 업데이트되지 않은 경우에는 앱의 리전 ID가 표시되지 않습니다. 기존 앱에서 ID는 선택사항이므로 기존 앱에서 리전 ID를 사용할 수 있게 되더라도 URL을 업데이트하거나 다른 변경을 수행할 필요가 없습니다.

리전 ID에 대해 자세히 알아보세요.

Pub/Sub는 애플리케이션 사이에서 안정적인 다대다 비동기 메시징 기능을 제공합니다. 게시자 애플리케이션은 메시지를 주제로 보낼 수 있으며 다른 애플리케이션은 주제를 구독하여 메시지를 수신할 수 있습니다.

이 문서에서는 Cloud 클라이언트 라이브러리를 사용하여 .NET 앱에서 Pub/Sub 메시지를 전송 및 수신하는 방법을 설명합니다.

기본 요건

  • App Engine에서 .NET용 'Hello, World!'의 안내를 따라 환경과 프로젝트를 설정하고 App Engine .NET 앱의 구조에 대해 알아봅니다.
  • 이 문서에 설명된 샘플 애플리케이션을 실행할 때 프로젝트 ID가 필요하므로 기록합니다.
* Google Cloud Console에서 사용자 인증 정보를 다운로드하여 서비스 계정을 만들고 서비스 계정 키를 애플리케이션에 추가하려면 GitHub에서 설명된 3단계를 따르세요. * Google Cloud Pub/Sub API를 사용 설정합니다.

API 사용 설정

샘플 앱 복제

샘플 앱을 로컬 머신에 복사한 후 pubsub 디렉터리로 이동합니다.

git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples
cd dotnet-docs-samples/appengine/flexible/pubsub

주제 및 구독 만들기

주제 및 구독을 만듭니다. 이때 Pub/Sub 서버가 요청을 전송할 엔드포인트를 지정해야 합니다.

gcloud pubsub topics create YOUR_TOPIC
gcloud pubsub subscriptions create YOUR_SUBSCRIPTION `
    --topic YOUR_TOPIC `
    --push-endpoint `
    https://YOUR_PROJECT_ID.REGION_ID.r.appspot.com/pubsub/push?token=YOUR_SECRET_TOKEN `
    --ack-deadline 10

환경 변수 설정

appsettings.json 파일을 수정하여 프로젝트 ID를 설정합니다.

{
  "Pubsub": {
    "ProjectId": "your-project-id",
    "VerificationToken": "your-secret-token",
    "TopicId": "your-topic",
    "SubscriptionId": "your-subscription"
  },

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

코드 검토

샘플 앱은 Cloud 클라이언트 라이브러리를 사용합니다.

[HttpGet]
[HttpPost]
public IActionResult Index(MessageForm messageForm)
{
    var model = new MessageList();
    if (!_options.HasGoodProjectId())
    {
        model.MissingProjectId = true;
        return View(model);
    }
    if (!string.IsNullOrEmpty(messageForm.Message))
    {
        // Publish the message.
        var pubsubMessage = new PubsubMessage()
        {
            Data = ByteString.CopyFromUtf8(messageForm.Message)
        };
        pubsubMessage.Attributes["token"] = _options.VerificationToken;
        _publisher.PublishAsync(pubsubMessage);
        model.PublishedMessage = messageForm.Message;
    }
    // Render the current list of messages.
    lock (s_lock) model.Messages = s_receivedMessages.ToArray();
    return View(model);
}

로컬에서 샘플 실행

로컬에서 실행할 때 Cloud SDK를 사용하면 Google Cloud API 사용에 대한 인증을 제공할 수 있습니다. 기본 요건의 설명대로 환경을 설정했다면 이 인증을 제공하는 gcloud init 명령어를 이미 실행한 것입니다.

샘플 앱을 로컬에서 실행하려면 다음 안내를 따르세요.

Visual Studio

  1. Visual Studio에서 dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln을 엽니다.

  2. 솔루션 탐색기에서 Pubsub를 마우스 오른쪽 버튼으로 클릭하고 디버그 > Start new instance(새 인스턴스 시작)를 선택합니다.

명령줄

  1. dotnet-docs-samples\appengine\flexible\Pubsub 디렉터리에서 다음 명령어를 실행합니다.

    dotnet restore
    dotnet run
    
  2. 웹브라우저에 다음 주소를 입력합니다.

    http://localhost:5000/
    

푸시 알림 시뮬레이션

애플리케이션은 로컬에서 메시지를 보낼 수 있지만 로컬에서 푸시 메시지를 받지는 못합니다. 하지만 로컬 푸시 알림 엔드포인트에 HTTP 요청을 전송하면 푸시 메시지를 시뮬레이션할 수 있습니다. 샘플에는 sample_message.json 파일이 포함되어 있습니다.

HTTP POST 요청을 보내려면 다음 안내를 따르세요.

Get-Content -Raw .\sample_message.json | Invoke-WebRequest -Uri
http://localhost:5000/Push?token=your-secret-token -Method POST -ContentType
'text/json' -OutFile out.txt

요청이 완료되면 localhost:5000을 새로 고친 후 수신 메시지 목록에서 메시지를 확인할 수 있습니다.

App Engine에서 실행

gcloud 명령줄 도구로 App Engine에 데모 앱을 배포하려면 app.yaml 파일이 있는 디렉터리에서 다음 명령어를 실행합니다.

Visual Studio

Hello World 앱을 배포하려면 다음 안내를 따르세요.

  1. Visual Studio에서 dotnet-docs-samples\appengine\flexible\AppEngineFlex.sln을 엽니다.
  2. 솔루션 탐색기에서 Pubsub을 마우스 오른쪽 버튼으로 클릭하고 Publish to Google Cloud…(Google Cloud에 게시…)를 선택합니다.
  3. App Engine Flex를 클릭합니다.
  4. 게시를 클릭합니다.

명령줄

dotnet-docs-samples\appengine\flexible\Pubsub 디렉터리에서 다음 명령어를 실행합니다.
dotnet restore
dotnet publish
cd bin\Debug\netcoreapp2.1\publish
gcloud app deploy

이제 https://PROJECT_ID.REGION_ID.r.appspot.com에서 애플리케이션에 액세스할 수 있습니다. 양식을 사용하여 메시지를 제출할 수 있지만 애플리케이션에서 어떤 인스턴스가 알림을 수신하는지 보장하지는 못합니다. 여러 메시지를 전송하고 페이지를 새로 고쳐 수신된 메시지를 확인할 수 있습니다.