 .. Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

 ..   http://www.apache.org/licenses/LICENSE-2.0

 .. Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.



Google Cloud PubSub Operators
=============================

`Google Cloud PubSub <https://cloud.google.com/pubsub/>`__ is a fully-managed real-time
messaging service that allows you to send and receive messages between independent applications.
You can leverage Cloud Pub/Sub’s flexibility to decouple systems and components hosted
on Google Cloud or elsewhere on the Internet.

Publisher applications can send messages to a topic and other applications can subscribe to that topic to receive the messages.
By decoupling senders and receivers Google Cloud PubSub allows developers to communicate between independently written applications.

Prerequisite Tasks
^^^^^^^^^^^^^^^^^^

.. include::/operators/_partials/prerequisite_tasks.rst

.. _howto/operator:PubSubCreateTopicOperator:

Creating a PubSub topic
^^^^^^^^^^^^^^^^^^^^^^^

The PubSub topic is a named resource to which messages are sent by publishers.
The :class:`~airflow.providers.google.cloud.operators.pubsub.PubSubCreateTopicOperator` operator creates a topic.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_pubsub.py
    :language: python
    :start-after: [START howto_operator_gcp_pubsub_create_topic]
    :end-before: [END howto_operator_gcp_pubsub_create_topic]


.. _howto/operator:PubSubCreateSubscriptionOperator:

Creating a PubSub subscription
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

A ``Subscription`` is a named resource representing the stream of messages from a single, specific topic,
to be delivered to the subscribing application.
The :class:`~airflow.providers.google.cloud.operators.pubsub.PubSubCreateSubscriptionOperator` operator creates the subscription.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_pubsub.py
    :language: python
    :start-after: [START howto_operator_gcp_pubsub_create_subscription]
    :end-before: [END howto_operator_gcp_pubsub_create_subscription]


.. _howto/operator:PubSubPublishMessageOperator:

Publishing PubSub messages
^^^^^^^^^^^^^^^^^^^^^^^^^^

A ``Message`` is a combination of data and (optional) attributes that a publisher sends to a topic and is eventually delivered to subscribers.
The :class:`~airflow.providers.google.cloud.operators.pubsub.PubSubPublishMessageOperator` operator would publish messages.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_pubsub.py
    :language: python
    :start-after: [START howto_operator_gcp_pubsub_publish]
    :end-before: [END howto_operator_gcp_pubsub_publish]


.. _howto/operator:PubSubPullSensor:

Pulling messages from a PubSub subscription
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The :class:`~airflow.providers.google.cloud.sensors.pubsub.PubSubPullSensor` sensor pulls messages from a PubSub subscription
and pass them through XCom.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_pubsub.py
    :language: python
    :start-after: [START howto_operator_gcp_pubsub_pull_message_with_sensor]
    :end-before: [END howto_operator_gcp_pubsub_pull_message_with_sensor]

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_pubsub.py
    :language: python
    :start-after: [START howto_operator_gcp_pubsub_pull_message_with_operator]
    :end-before: [END howto_operator_gcp_pubsub_pull_message_with_operator]

To pull messages from XCom use the :class:`~airflow.operators.bash.BashOperator`.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_pubsub.py
    :language: python
    :start-after: [START howto_operator_gcp_pubsub_pull_messages_result_cmd]
    :end-before: [END howto_operator_gcp_pubsub_pull_messages_result_cmd]

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_pubsub.py
    :language: python
    :start-after: [START howto_operator_gcp_pubsub_pull_messages_result]
    :end-before: [END howto_operator_gcp_pubsub_pull_messages_result]


.. _howto/operator:PubSubDeleteSubscriptionOperator:

Deleting a PubSub subscription
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The :class:`~airflow.providers.google.cloud.operators.pubsub.PubSubDeleteSubscriptionOperator` operator deletes the subscription.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_pubsub.py
    :language: python
    :start-after: [START howto_operator_gcp_pubsub_unsubscribe]
    :end-before: [END howto_operator_gcp_pubsub_unsubscribe]


.. _howto/operator:PubSubDeleteTopicOperator:

Deleting a PubSub topic
^^^^^^^^^^^^^^^^^^^^^^^

The :class:`~airflow.providers.google.cloud.operators.pubsub.PubSubDeleteTopicOperator` operator deletes topic.

.. exampleinclude:: /../../airflow/providers/google/cloud/example_dags/example_pubsub.py
    :language: python
    :start-after: [START howto_operator_gcp_pubsub_delete_topic]
    :end-before: [END howto_operator_gcp_pubsub_delete_topic]


Reference
^^^^^^^^^

For further information, look at:

* `Client Library Documentation <https://googleapis.dev/python/pubsub/latest/index.html>`__
* `Product Documentation <https://cloud.google.com/pubsub/docs/>`__
