Extensão do Google Cloud Pub/Sub

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

Versão: 1.5.1

Publicar mensagens em um tópico no serviço Google Cloud Pub/Sub.

Este conteúdo fornece uma referência para configurar e usar essa extensão.

Pré-requisitos

Antes de usar a extensão de um proxy de API com a política ExtensionCallout, você precisa:

  1. Crie um tópico do Cloud Pub/Sub, conforme descrito no Guia de início rápido: como usar o console.

  2. Depois de criar o tópico, conceda permissão para publicar nele. Por exemplo, é possível usar o papel roles/pubsub.publisher para publicar em tópicos. Para saber mais sobre os papéis do Cloud Pub/Sub, consulte Controle de acesso.

  3. Use o Console do GCP para gerar uma chave para a conta de serviço.

  4. Use o conteúdo do arquivo JSON da chave resultante ao adicionar e configurar a extensão usando a referência de configuração.

Sobre o Cloud Pub/Sub

O Cloud Pub/Sub fornece mensagens assíncronas de muitos para muitos que dissociam remetentes e destinatários. O Cloud Pub/Sub entrega mensagens duráveis de baixa latência que ajudam os desenvolvedores a integrar rapidamente os sistemas hospedados no Google Cloud Platform e externamente.

Se você está começando a usar o Cloud Pub/Sub, confira os guias de início rápido na documentação do Cloud Pub/Sub.

Amostras

Os exemplos a seguir ilustram como configurar o suporte para ações de extensão do Cloud Pub/Sub usando a política ExtensionCallout.

Mensagem de texto

Neste exemplo, a ação publish publica uma mensagem como uma string simples em um tópico especificado na configuração da extensão. A ação publish retorna o ID da mensagem publicada no tópico em que ela foi publicada e o grava na variável especificada pela tag <Output>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Publish-Message">
    <DisplayName>Publish Message</DisplayName>
    <Connector>cloud-pub-sub-extension-example</Connector>
    <Action>publish</Action>
    <Input><![CDATA[
      {
          "message" : "My test message."
      }
    ]]></Input>
    <Output>topic.message</Output>
</ConnectorCallout>

A seguinte política Atribuir mensagem usa o valor da variável que armazena a resposta da extensão para atribuir o payload da resposta. O ID da mensagem é armazenado na propriedade messageId da variável de saída:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Get-Topic-Message-ID">
    <DisplayName>Get Topic Message ID</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{topic.message.messageId}</Payload>
    </Set>
</AssignMessage>

Os dados de resposta são retornados como JSON:

{"messageId":"165918654986954"}

Portanto, o valor de topic.message.messageId é 165918654986954.

Mensagem JSON

Neste exemplo, a ação publish publica uma mensagem como JSON em um tópico especificado na configuração da extensão. A ação publish retorna o ID da mensagem publicada no tópico em que ela foi publicada e o grava na variável especificada pela tag <Output>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Publish-Message">
    <DisplayName>Publish Message</DisplayName>
    <Connector>cloud-pub-sub-extension-example</Connector>
    <Action>publish</Action>
    <Input><![CDATA[
      {
          "message" : { "info" : "My test message" }
      }
    ]]></Input>
    <Output>topic.message</Output>
</ConnectorCallout>

A seguinte política Atribuir mensagem usa o valor da variável que armazena a resposta da extensão para atribuir o payload da resposta. O ID da mensagem é armazenado na propriedade messageId da variável de saída:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Get-Topic-Message-ID">
    <DisplayName>Get Topic Message ID</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{topic.message.messageId}</Payload>
    </Set>
</AssignMessage>

Os dados de resposta são retornados como JSON:

{"messageId":"165918654986954"}

Portanto, o valor de topic.message.messageId é 165918654986954.

Ações

publicar

Publica uma mensagem no tópico especificado na configuração desta extensão.

Sintaxe

<Action>publish</Action>
<Input><![CDATA[{
  "message" : "message-to-publish" | JSON-structured-data,
  "customAttributes": JSON-array
}]]></Input>

Exemplo de string

<Action>publish</Action>
<Input><![CDATA[
  {
      "message" : "My test message."
  }
]]></Input>

Exemplo de dados estruturados JSON

<Action>publish</Action>
<Input><![CDATA[
  {
      "message" : { "info" : "My test message" }
  }
]]></Input>

Exemplo de atributos personalizados

<Action>publish</Action>
<Input><![CDATA[
  {
      "message" : { "info" : "My test message" },
      "customAttributes": {"attr1": "foo", "attr2": "bar"}
  }
]]></Input>

Parâmetros de solicitação

Parâmetro Descrição Tipo Padrão Obrigatório
mensagem A mensagem a ser publicada. Você pode usar uma string simples ou estruturar sua mensagem com JSON do seu próprio design. String ou JSON Nenhum Sim
customAttributes

Atributos personalizados a serem adicionados à mensagem no formulário:

"customAttributes": {"attr1": "foo", "attr2": "bar"}.
Matriz JSON Nenhum Não

Resposta

JSON que contém o ID da mensagem publicada no tópico. Exemplo:

{"messageId":"165918654986954"}

Referência de configuração

Use o seguinte ao configurar e implantar essa extensão para uso em proxies de API.

Propriedades comuns de extensão

The following properties are present for every extension.

Property Description Default Required
name Name you're giving this configuration of the extension. None Yes
packageName Name of the extension package as given by Apigee Edge. None Yes
version Version number for the extension package from which you're configuring an extension. None Yes
configuration Configuration value specific to the extension you're adding. See Properties for this extension package None Yes

Propriedades deste pacote de extensão

Propriedade Descrição Padrão Obrigatório
topic O tópico em que será feita a publicação. Receba esse valor do serviço do Pub/Sub, como o console do GCP. Por exemplo, o nome do tópico pode ter a forma projects/GCP-PROJECT-ID/topics/TOPIC-NAME Nenhum. Sim.
credentials Quando inserido no console do Apigee Edge, esse é o conteúdo do seu arquivo de chave da conta de serviço. Quando enviado pela API Management, é um valor codificado em base64 gerado do arquivo de chave da conta de serviço. Nenhum. Sim.