Filtrare i messaggi di una sottoscrizione

In questa pagina viene spiegato come creare sottoscrizioni Pub/Sub con filtri.

Quando ricevi i messaggi da una sottoscrizione con un filtro, riceverai solo quelli che corrispondono a un filtro. Il servizio Pub/Sub riconosce automaticamente i messaggi che non corrispondono al filtro. Puoi filtrare i messaggi in base ai rispettivi attributi, ma non in base ai dati contenuti nel messaggio.

Puoi collegare più sottoscrizioni a un argomento e ogni sottoscrizione può avere un filtro diverso.

Ad esempio, se hai un argomento che riceve notizie da diverse parti del mondo, puoi configurare una sottoscrizione per filtrare le notizie pubblicate solo da una regione specifica. Per questa configurazione, devi assicurarti che uno degli attributi dei messaggi dell'argomento trasmetta la regione di pubblicazione delle notizie.

Quando ricevi i messaggi da una sottoscrizione con un filtro, non ti vengono addebitati costi per i messaggi in uscita per i messaggi che Pub/Sub riconosce automaticamente. Per questi messaggi sono previsti costi di consegna dei messaggi e tariffe per l'archiviazione correlate alla ricerca .

Creare una sottoscrizione con un filtro

Le sottoscrizioni pull e push possono avere filtri. Tutti i sottoscrittori possono ricevere messaggi da sottoscrizioni con filtri, inclusi i sottoscrittori che utilizzano l'API StreamingPull.

Puoi creare una sottoscrizione con un filtro utilizzando la Google Cloud console, Google Cloud CLI, le librerie client o l'API Pub/Sub.

Console

Per creare una sottoscrizione pull con un filtro:

  1. Nella Google Cloud console, vai alla pagina Sottoscrizioni.

    Vai alla pagina degli abbonamenti

  2. Fai clic su Crea sottoscrizione.

  3. Inserisci l'ID sottoscrizione.

  4. Scegli o crea un argomento dal menu a discesa. La sottoscrizione riceve i messaggi dall'argomento.

  5. Nella sezione Filtro sottoscrizione, inserisci l' espressione di filtro.

  6. Fai clic su Crea.

Per creare una sottoscrizione push con un filtro:

  1. Nella Google Cloud console, vai alla pagina Sottoscrizioni.

    Vai alla pagina degli abbonamenti

  2. Fai clic su Crea sottoscrizione.

  3. Inserisci l'ID sottoscrizione.

  4. Scegli o crea un argomento dal menu a discesa. La sottoscrizione riceve i messaggi dall'argomento.

  5. Nella sezione Tipo di consegna, fai clic su Push.

  6. Nel campo URL endpoint, inserisci l'URL dell'endpoint push.

  7. Nella sezione Filtro sottoscrizione, inserisci l' espressione di filtro.

  8. Fai clic su Crea.

gcloud

Per creare una sottoscrizione pull con un filtro, utilizza il gcloud pubsub subscriptions create comando con il --message-filter flag:

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --message-filter='FILTER'

Sostituisci quanto segue:

  • SUBSCRIPTION_ID: l'ID della sottoscrizione da creare
  • TOPIC_ID: l'ID dell'argomento da collegare alla sottoscrizione
  • FILTER: un'espressione nella sintassi di filtro

Per creare una sottoscrizione push con un filtro, utilizza il gcloud pubsub subscriptions create comando con i flag --push-endpoint e --message-filter:

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --push-endpoint=PUSH_ENDPOINT \
  --message-filter='FILTER'

Sostituisci quanto segue:

  • SUBSCRIPTION_ID: l'ID della sottoscrizione da creare
  • TOPIC_ID: l'ID dell'argomento da collegare alla sottoscrizione
  • PUSH_ENDPOINT: l'URL del server su cui viene eseguito il sottoscrittore push
  • FILTER: un'espressione nella sintassi di filtro

REST

Per creare una sottoscrizione con un filtro, utilizza il projects.subscriptions.create metodo.

PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID
Authorization: Bearer $(gcloud auth print-access-token)

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del progetto in cui creare la sottoscrizione
  • SUBSCRIPTION_ID: l'ID della sottoscrizione da creare

Per creare una sottoscrizione pull con un filtro, specifica il filtro nel corpo della richiesta:

{
  "topic": "projects/PROJECT_ID/topics/TOPIC_ID",
  "filter": "FILTER"
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del progetto con l'argomento
  • TOPIC_ID: l'ID dell'argomento da collegare alla sottoscrizione
  • FILTER: un'espressione nella sintassi di filtro

Per creare una sottoscrizione push con un filtro, specifica l'endpoint push e il filtro nel corpo della richiesta:

{
  "topic": "projects/PROJECT_ID/topics/TOPIC_ID",
  "pushConfig": {
    "pushEndpoint": "PUSH_ENDPOINT"
  },
  "filter": "FILTER"
}

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto del progetto con l'argomento
  • TOPIC_ID: l'ID dell'argomento da collegare alla sottoscrizione
  • PUSH_ENDPOINT: l'URL del server su cui viene eseguito il sottoscrittore push
  • FILTER: un'espressione nella sintassi di filtro

C++

Prima di provare questo esempio, segui le istruzioni di configurazione di C++ in Guida rapida all'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API Pub/Sub C++ .

namespace pubsub = ::google::cloud::pubsub;
namespace pubsub_admin = ::google::cloud::pubsub_admin;
[](pubsub_admin::SubscriptionAdminClient client,
   std::string const& project_id, std::string topic_id,
   std::string subscription_id) {
  google::pubsub::v1::Subscription request;
  request.set_name(
      pubsub::Subscription(project_id, std::move(subscription_id))
          .FullName());
  request.set_topic(
      pubsub::Topic(project_id, std::move(topic_id)).FullName());
  request.set_filter(R"""(attributes.is-even = "false")""");
  auto sub = client.CreateSubscription(request);
  if (